2013-06-30 69 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'函數獲取它的示例。 –