我正在尝试使用HTTPClient为NodeJS发送2个参数的POST请求。
var HTTPClient = require('httpclient')
var options = {
hostname: 'localhost',
path: '/',
port: 8081,
secure: false,
method: 'POST',
headers: {
'x-powered-by': 'HTTPClient.js'
},
'Content-Type': 'application/x-www-form-urlencoded',
params:{
command:'TEST',
param1:'TEST'
}
}
var example1 = new HTTPClient(options)
example1.post('/executeGraph1', function (err, res, body) {
console.log(typeof body,body);
})
然后我使用Express来捕获POST请求
var express = require('express');
var app = express();
var path = require('path');
var bodyParser = require('body-parser');
// configure the app to use bodyParser()
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, '')));
app.post('/executeGraph1', function (req, res) {
console.log("Got a POST request for grahBar");
console.log("params",req.params);
console.log("body",req.body);
console.log("query",req.query);
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
我在其他问题上尝试了解决方案,例如使用'Content-Type': 'application/x-www-form-urlencoded'
或app.use(bodyParser.urlencoded({extended: true}));
,但是我不断地得到空变量。我试过查找属性body,params或query,但所有三个选项都是空数组
有人知道这里出了什么问题吗?
答案 0 :(得分:2)
您的服务器代码没有问题,req.query
将包含查询参数,但是当您的路由字符串定义为req.params
时,会使用/executeGraph1/:paramName
可能会有更多以{{1}为前缀的参数例如:
。
Altough我没有使用httpclient模块,在请求url中添加查询字符串,例如
/res1/:param1/res2/:param2/:param3
在选项变量中用example1.post('/executeGraph1?queryParamName=value', function (err, res, body) {
console.log(typeof body,body);
})
替换params
也可以。
我建议改用https://github.com/request/request。
POST处理程序的最后一件事是添加为最后一行query
如果你不这样做,你的请求将挂起并等待超时。 res.end()
可以接受将发送给客户的参数。