POST请求上的参数为空

时间:2017-09-05 16:17:34

标签: node.js express

我正在尝试使用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,但所有三个选项都是空数组

有人知道这里出了什么问题吗?

1 个答案:

答案 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()可以接受将发送给客户的参数。