【问题标题】:POST request node jsPOST请求节点js
【发布时间】:2017-08-19 19:50:33
【问题描述】:

好的,所以我已经为此苦苦挣扎了一段时间。我有一个应该可以工作的 curl 命令。由于我不熟悉 curl 我将其“翻译”为节点。但它不起作用。这是卷曲线。

    curl -X POST --header 'Content-Type: application/json' --header 'token: XXXXXX' -d '[ \ 
   { \ 
     "id": "eh", \ 
     \ 
     "kind": "goods", \ 
     "data": {} \ 
   } \ 
 ]' 'http://localhost:5000/api/article'

当我把它翻译成节点时,它看起来像这样:

var request = require('request');

var dataString = '[ \ 
   { \ 
     "id": "eh", \ 
     \ 
     "kind": "goods", \ 
     "data": {} \ 
   } \ 
 ]';

var options = {
    url: 'http://localhost:5000/api/article',
    method: 'POST',
    body: dataString
};

function callback(error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body);
    }
}

request(options, callback);

我得到的错误信息是

throw new TypeError('第一个参数必须是字符串或缓冲区');

谁能告诉我怎么了?谢谢

【问题讨论】:

  • 你的代码的输出是什么?你预计会发生什么?
  • throw new TypeError('First argument must be a string or Buffer');
  • 该错误出现在哪一行!?¿
  • _http_outgoing.js:456 throw new TypeError('第一个参数必须是字符串或缓冲区'); ^
  • 认为我解决了,现在看看我的答案

标签: node.js curl post


【解决方案1】:

来自request docs:

body - PATCH、POST 和 PUT 请求的实体主体。必须是 Buffer、String 或 ReadStream。如果 json 为 true,则 body 必须是 JSON 可序列化对象。

所以你有两个选择。

如果这是您要发送的正文:

var data = [{
    "id": "eh",
    "kind": "goods",
    "data": {}
}];

您可以通过json: true 选项:

var options = {
    url: 'http://localhost:5000/api/article',
    method: 'POST',
    body: data,
    json: true
};

或者您可以在发送之前对数据数组进行字符串化:

var options = {
    url: 'http://localhost:5000/api/article',
    method: 'POST',
    body: JSON.stringify(data)    
};

【讨论】:

  • 是的,我知道只是直接复制了它,我已经删除了实际代码中的所有反斜杠。
  • 嗯。这删除了所有错误消息,但仍然没有成功发布。当我尝试“获取”文章和控制台日志时,我只是得到“null”
  • 您问如何执行 POST 请求,我回答了您。您的问题现在看起来与您将文章保存到数据库而不是请求的方式有关。如果文章被存储,您是否在 DB 中检查过?
  • 很抱歉我没有回答,但谢谢。我需要这部分“json:true”。我也遇到了后端问题,但我解决了。
【解决方案2】:
var dataString = [  
   { 
     "id": "eh",  
     "kind": "goods", 
     "data": {} 
   } 
 ];

var options = {
    url: 'http://localhost:5000/api/article',
    method: 'POST',
    body: dataString
};

function callback(error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body);
    }
}

//request(options, callback);
enter code here
 request.post({url:options.url, formData: :options.body}, callback);

【讨论】:

    猜你喜欢
    • 2017-03-13
    • 1970-01-01
    • 2016-12-12
    • 2016-02-11
    • 2020-10-25
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    相关资源
    最近更新 更多