无法从nginx反向代理后面的节点应用中的post请求中获取数据

时间:2017-03-04 18:43:17

标签: node.js nginx

我在nginx反向代理后面有一个node.js应用程序,当我发出POST请求时我无法获取数据(使用Firefox的REST Easy插件)。我在网站上查找,但找不到有用的东西。这是我的代码。

nodetest.js

var express = require('express');
var bodyParser = require('body-parser');
var app = express();

app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());

app.post('/test', function (req, res){
  var p1 = req.body.param1;
  var p2 = req.body.param2;
  res.send('param1: '+p1+' param2: '+p2+' ');
});

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(8081, function () {
  console.log('Example app listening on port 8081!');
});

的/ etc / nginx的/位点可用/默认

server {
        listen 80;

        server_name funklipe.cl;

        location / {
                proxy_pass http://127.0.0.1:8081;
                proxy_redirect off;
                proxy_http_version 1.1;
                proxy_buffering off;
        }
}

我使用pm2来运行节点应用程序

pm2 start nodetest.js

当发出帖子请求时(使用param1 = foo和param2 = var)我得到了

param1: undefined param2: undefined 

我希望你能帮助我,如果你需要更多信息,请告诉我

提前致谢

1 个答案:

答案 0 :(得分:1)

你的nginx配置对我来说似乎没问题。

在客户端,请确保正确设置标头。例如:

如果您指定application/json

$ curl -X POST -H 'Content-Type: application/json' -d '{"param1": "this_is_param1", "param2": "this_is_param2"}' http://localhost:8081/test
param1: this_is_param1 param2: this_is_param2

如果您指定application/x-www-form-urlencoded

$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' -d param1=this_is_param1 -d param2=this_is_param2 http://localhost:8081/test
param1: this_is_param1 param2: this_is_param2

但是如果你没有指定标题,那么客户端将使用默认值。这种行为将是出乎意料的:

$ curl -X POST -d '{"param1": "this_is_param_1", "param2": "this_is_param2"}' http://localhost:8081/test
param1: undefined param2: undefined