POST请求节点js

时间:2017-03-27 07:53:07

标签: node.js curl post

好的,所以我一直在努力解决这个问题。我有一个应该工作的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);

我收到的错误消息是

  

抛出新的TypeError('第一个参数必须是字符串或缓冲区');

有人能告诉我什么是错的吗?感谢

2 个答案:

答案 0 :(得分:2)

来自request文档:

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)    
};

答案 1 :(得分:0)

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);