2013-06-30 67 views
1

从nodejs我试图发布数据到另一个URL 127.0.0.1:3002(在文件poster.js), ,但是当我尝试访问它在服务器上的127.0.0.1: 3002再发布的数据是不是来:Node.js中的HTTP POST不起作用

我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 

我在做什么错?

+1

你确定'方法:'GET'在假定的POST操作?编辑:我看到你改变了它,仍然没有工作? –

+0

虽然尝试它只是发布,但最后我改变它GET获取错误,任何方式仍然不工作 – WebServer

+0

'ses.setEncoding('utf8');'一个错字? –

回答

2

你的客户端的工作,但是当你POST,数据不params显示默认的服务器上(实际上,params为路由信息)

既然你发布的原始数据,你会需要自己收集数据以便使用它,例如通过您自己的简单身体分析器;

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') 

编辑:如果你想要的数据作为参数,则需要更改客户端发布的数据与数据的名称查询字符串;

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') 
+0

感谢您的回复 然后有什么办法,如果我想在req.params中的数据。 – WebServer

+0

@WebServer添加了一个如何从'req.param'函数获取它的示例。 –