通过POST请求将数据从node.js服务器发送到node.js服务器

我试图通过从一个node.js服务器到另一个node.js服务器的POST请求发送数据。 我在“client”node.js中做的是:

 var options = { host: 'my.url', port: 80, path: '/login', method: 'POST' }; var req = http.request(options, function(res){ console.log('status: ' + res.statusCode); console.log('headers: ' + JSON.stringify(res.headers)); res.setEncoding('utf8'); res.on('data', function(chunk){ console.log("body: " + chunk); }); }); req.on('error', function(e) { console.log('problem with request: ' + e.message); }); // write data to request body req.write('data\n'); req.write('data\n'); req.end(); 

这个块或多或less地来自node.js网站,所以它应该是正确的。 我唯一不知道的是如何在optionsvariables中包含用户名和密码来实际login。 这是我如何处理服务器node.js中的数据(我使用express):

 app.post('/login', function(req, res){ var user = {}; user.username = req.body.username; user.password = req.body.password; ... }); 

如何将这些usernamepassword字段添加到optionsvariables中以使其login?

谢谢

发布数据是发送一个查询string(就像你将它发送URL后的方式? )作为请求主体的问题。

这需要Content-TypeContent-Length标题,所以接收服务器知道如何解释传入的数据。 (*)

 var querystring = require('querystring'); var http = require('http'); var data = querystring.stringify({ username: yourUsernameValue, password: yourPasswordValue }); var options = { host: 'my.url', port: 80, path: '/login', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(data) } }; var req = http.request(options, function(res) { res.setEncoding('utf8'); res.on('data', function (chunk) { console.log("body: " + chunk); }); }); req.write(data); req.end(); 

(*)发送数据需要正确设置Content-Type标题,即标准HTML表单将使用的传统格式的application/x-www-form-urlencoded

以完全相同的方式发送JSON( application/json )很容易; 只是JSON.stringify()数据。

URL编码的数据支持一级结构(即密钥和值)。 JSON在交换具有嵌套结构的数据时非常有用。

底线是:服务器必须能够解释有问题的内容types。 它可以是text/plain或其他任何东西; 如果接收服务器了解它,则不需要转换数据。

如果你的数据是一个不寻常的字符集,即不是UTF-8,那么添加一个charset参数(例如application/json; charset=Windows-1252 )。 例如,如果您从文件中读取它,这可能是必需的。

你也可以使用Requestify ,一个非常酷,非常简单的HTTP客户端,我为nodeJS +写的它支持caching。

只需执行以下操作来执行POST请求:

 var requestify = require('requestify'); requestify.post('http://example.com', { hello: 'world' }) .then(function(response) { // Get the response body (JSON parsed or jQuery object for XMLs) response.getBody(); });