简单的NodeJS http请求相当于curl

时间:2017-02-19 22:18:30

标签: node.js curl

我无法通过nodeJS将curl转换为等效的http请求。我使用了Request模块,但在发出请求时我似乎做错了。当我运行它时,它给了我

body: Cannot POST /path

不确定如何调试这个,任何想法?

var data = JSON.stringify({
  'sender': {
    'name': 'name',
    'handle': 'handle'
  }, 
  'subject': 'Title here',
  'body': 'something something',
  'metadata': {}
});

var options = {
    host: 'website.com',
    path: '/path',
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer <token>',
        'Accept': 'application/json',
        'Content-Length': Buffer.byteLength(data)
    }
};

var req = http.request(options, function(res) {
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        console.log("body: " + chunk);
    });
});
req.write(data);
req.end();

以下是我尝试为上述nodejs制作的等效curl(有效)。

curl --include \
    --request POST \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer <token>" \
    --header "Accept: application/json" \
    --data-binary "{
    \"sender\": {
       \"name\": \"name\",
       \"handle\": \"handle\"
    },
    \"subject\": \"Title here\",
    \"body\": \"something something\",
    \"metadata\": {}
    }" \
    'website.com/path"

1 个答案:

答案 0 :(得分:1)

您可以将json参数与request库直接包含在JSON数据中:

var request = require('request');

var options = {
    uri: 'http://website.com/path',
    method: 'POST',
    headers: {
        'Authorization': 'Bearer <token>',
        'Accept': 'application/json'
    },
    json: {
        'sender': {
            'name': 'name',
            'handle': 'handle'
        },
        'subject': 'Title here',
        'body': 'something something',
        'metadata': {}
    }
};

var req = request(options, function(error, response, body) {

    if (error) {
        console.log(error);
        return;
    }
    if (response.statusCode == 200) {
        console.log(body);
    } else {
        console.log("receive status code : " + response.statusCode);
    }
});

来自request options doc

  

json - 将body设置为值的JSON表示并添加   内容类型:application / json标头。另外,解析   响应机构为JSON。