我试图通过一个 node 的POST请求发送数据.将js服务器连接到另一个 node .js服务器.我在"客户端" 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 获取的.所以它应该是正确的.我唯一看不到的是如何在options变量中包含用户名和密码以实际登录.这就是我处理服务器 node 中数据的方式.js(我使用express):

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

如何将这usernamepassword字段添加到options变量中以使其登录?

谢谢

推荐答案

发布数据就是发送一个查询字符串(就像在?之后发送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();

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

以完全相同的方式发送JSON(application/json)很容易;只需事先准备好数据.

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

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

如果数据在不寻常的字符集中,即不是UTF-8,请添加字符集参数(例如application/json; charset=Windows-1252).例如,如果从文件中读取,这可能是必要的.

Node.js相关问答推荐

如何使用jq将依赖项添加到package.json中

如何模拟 mysql2 `getConnection`

如何使用 Node.js 连接到 Cloud SQL?

在父模式中设置默认值.

NodeJS `request` 库无法通过 multipart-form-data 将文件发布到 dotnet 服务器

Nodejs 从链接数组中获取数据并保存到 mongodb

只要我在后端正确验证所有内容,就可以将这些数据存储在本地存储中吗?

ResponseError:键空间ks1不存在

带有事件网格的 Azure 函数在没有 ngrok 的情况下在本地运行

用户通过 oauth2 twitter 授权或通过Passport discord后如何重定向到 React/Vue 路由?

JavaScript & Node - 将图像文件保存到服务器但无法查看

npm 不会安装 express 吗?

在 PassportJS 中使用多种本地策略

npm package.json 操作系统特定脚本

从 React(同构应用程序)进行 API 调用时出现Access-Control-Allow-Origin问题

nodejs:Ajax 与 Socket.IO,优缺点

Node.js 中的 PHP exit()/die() 类似功能是什么

Puppeteer 等待所有图像加载然后截图

什么时候应该将函数存储到变量中?

node.js 异步库