Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过POST请求将数据从node.js服务器发送到node.js服务器_Node.js - Fatal编程技术网

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

通过POST请求将数据从node.js服务器发送到node.js服务器,node.js,Node.js,我正试图通过POST请求将数据从node.js服务器发送到另一个node.js服务器。我在“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.statusCod

我正试图通过
POST
请求将数据从node.js服务器发送到另一个node.js服务器。我在“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();
此区块或多或少是从node.js网站获取的,因此它应该是正确的。我唯一看不到的是如何在
选项
变量中包含用户名和密码以实际登录。这就是我如何处理server node.js中的数据(我使用express):

如何将这些
用户名
密码
字段添加到
选项
变量中以使其登录


谢谢

发布数据只需发送一个查询字符串(就像在
之后发送URL一样)作为请求主体

这需要
内容类型
内容长度
标题,以便接收服务器知道如何解释传入数据。(*)


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

以完全相同的方式发送JSON(
application/JSON
)很容易;只需事先
JSON.stringify()

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

底线是:服务器必须能够解释有问题的内容类型。它可以是
text/plain
或其他任何内容;如果接收服务器理解数据的原样,则无需转换数据

如果您的数据位于异常字符集(即非UTF-8),请添加字符集参数(例如
application/json;charset=Windows-1252
)。例如,如果您从文件中读取它,这可能是必需的

您还可以使用,这是我为nodeJS+编写的一个非常酷、非常简单的HTTP客户端,它支持缓存

只需执行以下操作即可执行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();
});

可能重复安装requestify失败。节点gyp重建不正常:代码0@marcel:它对我来说也很好,您需要查看
requestify
软件包的构建要点,然后首先安装它们。谢谢大家!即将推出的下一个版本将不再需要python,因为jQuery(目前用于解析XML响应)作为可选的依赖项从核心中退出(-):这可以用来模拟表单帖子吗?我试过了,我的帖子请求的正文部分有问题。关于“内容类型”的回答很好:“application/x-www-form-urlencoded”,我在到处搜索,谢谢!正确的解释和完美的编码。在发布数据时,假设它是
req.write(数据)
如果执行此操作,在从服务器输出响应数据的终端中,例如,如何在变量中收集响应数据?
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();
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();
});