Node.js中的HTTP POST不工作

HTTP POST in Node.js not working

本文关键字:工作 POST HTTP js 中的 Node      更新时间:2023-09-26

从nodejs,我试图将数据发布到另一个URL 127.0.0.1:3002(在poster.js文件中),但当我试图在127.0.0.1:3002的服务器上访问它时,发布的数据就不来了:

我的poster.js看起来像这样:

var http = require('http');
function post() {
    var options = {
        host : '127.0.0.1',
        port : 3002,
        path : '/note/',
        method : 'POST'
    };
    var req = http.request(options, function(res) {
        res.setEncoding('utf8');
        res.on('data', function(chunk) {
            console.log('BODY: ' + chunk);
        });
    });
    req.on('error', function(e) {
        console.log('problem with request: ' + e.message);
    });
    req.write("<some>xml</some>");
    req.end();
}
post();

我在app.js中的服务器代码是:

var express=require('express');
app=express();
app.post('/note',function(req,res){
    console.log(req.params);
})
app.listen(3002);
console.log('sweety dolly')

我的服务器控制台显示:

sweety dolly
[]

req.params显示[],这意味着它在发送时什么也没收到,我正在发送xml

在两个不同的命令行中我正在发射两种不同的过程,如

 node app

然后在下一个命令行

 node poster

我做错了什么????

您的客户端可以工作,但当您POST时,默认情况下数据不会显示在服务器上的params中(实际上,params用于路由信息)

由于您发布的是原始数据,您需要自己收集数据才能使用它,例如通过use使用您自己的简单主体解析器;

var express=require('express');
app=express();
app.use(function(req, res, next) {
  var data = '';
  req.setEncoding('utf8');
    req.on('data', function(part) {      // while there is incoming data,
       data += part;                     // collect parts in `data` variable
    }); 
    req.on('end', function() {           // when request is done,
        req.raw_body = data;                 // save collected data in req.body
        next();
    });
});
app.post('/note',function(req,res){
    console.log(req.raw_body);               // use req.body that we set above here
})
app.listen(3002);
console.log('sweety dolly')

EDIT:如果您希望将数据作为参数,则需要更改客户端以将数据作为带有数据名称的查询字符串发布;

var http = require('http');
var querystring = require('querystring');
function post() {
    var post_data = querystring.stringify({ xmldata: '<some>xml</some>' })
    var options = {
        host : '127.0.0.1', port : 3002, path : '/note/', method : 'POST',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
          'Content-Length': post_data.length
        }
    };
    var req = http.request(options, function(res) {
        res.setEncoding('utf8');
        res.on('data', function(chunk) {
            console.log('BODY: ' + chunk);
        });
    });
    req.on('error', function(e) {
        console.log('problem with request: ' + e.message);
    });

    req.write(post_data);
    req.end();
}
post();

然后您可以使用标准的bodyParserparam函数中获取数据;

var express=require('express');
app=express();
app.use(express.bodyParser());
app.post('/note',function(req,res){
    console.log(req.param('xmldata'));
})
app.listen(3002);
console.log('sweety dolly')