Как я должен передавать данные json в полезной нагрузке запроса http post request

Я хотел бы знать, как передать запрос json в полезную нагрузку, например: {'name': 'test', 'value': 'test'}:

  var post_data = {};

  var post_options = {
      host: this._host,
      path: path,
      method: 'POST',
      headers: {
      Cookie : "session=" + session,
          'Content-Type': 'application/json',
          'Content-Length': post_data.length,
      }
  };

  // Set up the request
  var post_req = http.request(post_options, function(res) {
      res.setEncoding('utf8');
      res.on('data', function (chunk) {
          console.log('========Response========: ' + chunk);
      });
  });

  // post the data
  post_req.write(post_data);
  post_req.end();

Спасибо за помощь. Пратс

Ответ 1

Использовать модуль запроса

npm install -S request

var request = require('request')

var postData = {
  name: 'test',
  value: 'test'
}

var url = 'https://www.example.com'
var options = {
  method: 'post',
  body: postData,
  json: true,
  url: url
}
request(options, function (err, res, body) {
  if (err) {
    console.error('error posting json: ', err)
    throw err
  }
  var headers = res.headers
  var statusCode = res.statusCode
  console.log('headers: ', headers)
  console.log('statusCode: ', statusCode)
  console.log('body: ', body)
})

Ответ 2

Просто конвертируйте в строку и отправьте.

post_req.write(JSON.stringify(post_data));

Ответ 3

Я пробовал это и, похоже, работал. Мне нужен базовый auth, поэтому я включил auth, если вам это не нужно, вы можете отказаться от него.

var value = {email:"",name:""};

 var options = {
        url: 'http://localhost:8080/doc/',
        auth: {
            user: username,
            password: password
        },
        method :"POST",
        json : value,

    };

    request(options, function (err, res, body) {
        if (err) {
            console.dir(err)
            return
        }
        console.dir('headers', res.headers)
        console.dir('status code', res.statusCode)
        console.dir(body)
    });