我正在使用node.js将HTTP POST发送到APP服务器。 POST主体中的电子邮件地址joe@gmail.com在APP服务器端显示为joe%40gmail.com。我在下面的代码中使用了Content-Type text / plain,但是根据服务器日志,application / x-www-form-urlencoded实际上是在POST请求头中。
我之前的帖子在Chrome邮递员结果上有误。请忽略它,抱歉混淆。
我是新手,可能在这里错过了一些明显的东西。任何帮助表示赞赏。
以下是代码:
var express = require("express");
var app = module.exports = express();
var request = require('request');
var config = require('../config');
app.post('/', function(req, res) {
var username = req.body.name;
var password = req.body.passwd;
var email = req.body.email;
console.log("email=", email);
// connect to APP server
var url = config.appServer;
request( {
uri: url,
method: "POST",
timeout: 10000, // 10 sec
headers: {
'Content-Type': 'text/plain'
},
form: {
act: 'create',
username : username,
passwd: password,
email: email
}
}, function (error, response, body) {
// handle return here
答案 0 :(得分:0)
这是完全正常的行为。在content-type
使用form
选项时,您也无需设置request
标题。
这是一个简短的例子:
request({
uri: 'http://requestb.in/1g2xzno1',
method: 'POST',
timeout: 10000, // 10 sec
form: {
act: 'create',
username : 'username',
passwd: 'password',
email: 'joe@gmail.com'
}
}, function (err, res, body) {
if (err) console.log(err)
console.log(body)
})
您可以看到该请求的结果here。这是您的应用服务器收到的内容。然后,您需要做的就是解析您的应用服务器上的请求正文(它是RAW BODY标题下面的字符串):
var qs = require('qs')
qs.parse('act=create&username=username&passwd=password&email=joe%40gmail.com')
{ act: 'create',
username: 'username',
passwd: 'password',
email: 'joe@gmail.com' }
或者,如果您在应用服务器上使用Express,则可以使用body-parser
中间件来为您执行相同操作:
app.use(bodyParser.urlencoded({extended: true}))