我正在尝试将一些json发布到URL。我在stackoverflow上看到了有关此问题的其他各种问题,但似乎都不清楚或无法解决。这是我得到的结果,我在api docs上修改了示例:

var http = require('http');
var google = http.createClient(80, 'server');
var request = google.request('POST', '/get_stuff',
  {'host': 'sever',  'content-type': 'application/json'});
request.write(JSON.stringify(some_json),encoding='utf8'); //possibly need to escape as well?
request.end();
request.on('response', function (response) {
  console.log('STATUS: ' + response.statusCode);
  console.log('HEADERS: ' + JSON.stringify(response.headers));
  response.setEncoding('utf8');
  response.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

当我将其发布到服务器时,出现错误,告诉我它不是json格式,或者不是utf8,应该是utf8。我尝试提取请求网址,但它为null。我只是从nodejs开始,所以请保持友好。

最佳答案

问题是您在错误的位置设置了Content-Type。它是请求 header 的一部分,它们在options对象(request()方法的第一个参数)中具有自己的键。这是使用ClientRequest()进行一次交易的实现(如果需要与同一服务器建立多个连接,则可以保留createClient()):

var http = require('http')

var body = JSON.stringify({
    foo: "bar"
})

var request = new http.ClientRequest({
    hostname: "SERVER_NAME",
    port: 80,
    path: "/get_stuff",
    method: "POST",
    headers: {
        "Content-Type": "application/json",
        "Content-Length": Buffer.byteLength(body)
    }
})

request.end(body)

问题中的其余代码是正确的(request.on()及以下)。

关于javascript - 如何使用node.js发布到请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4505809/

10-12 15:37