Node.js中的HTTP POST不工作
HTTP POST in Node.js not working
从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();
然后您可以使用标准的bodyParser
从param
函数中获取数据;
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')
相关文章:
- Jquery Ajax POST不工作.适用于GET
- jQuery$.post可以在chrome、safari中工作,但不能在FF中工作(声明成功回调函数未定义)
- GET在POST不工作XMLHttpRequest的情况下正常工作
- Jquery Ajax POST方法不工作,返回未定义的值
- $.post 仅使用警报工作
- Jquery Post方法在本地工作,但在服务器上不工作
- 跨源请求被POST阻止,但浏览器上的req可以正常工作,但设备上不工作
- 节点 js POST mysite/uploads 404(未找到)上传到 Azure 时,但在本地工作
- Jquery Post与JSON响应工作
- 角度.js http.post 美元,Codeigniter 不工作
- Ajax Post请求总是运行错误功能,尽管卷曲到相同的url工作正常
- 服务工作线程是否可以缓存 POST 请求
- 无法让 Ajax POST 与 Emberjs 一起工作
- $.AJAX Post在JS中不起作用,但在Advanced Rest Client中工作
- 为什么AJAX $.post不能在wordpress中工作
- $.post之后jQuery日期选择器不工作
- HTML POST->重定向工作,XMLHTTPrequest->重定向不起作用(无法从null发出任何请求
- 将数据以json形式POST到在Phantomjs中不工作的Servlet
- POSTMAN工作时发生角度POST交叉原点错误
- Post在IE9上无法正常工作