2017-03-04 38 views
1

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

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 

我希望你能帮助我,如果你需要更多的信息只是让我提前知道

感谢

+0

上面的工作在我的机器上,你的nginx conf是什么样的?你是否在http块中导入默认值?当你发布帖子请求时,你是否在你的POST正文中使用form-urlencoded? – Josh

+0

我没有更改conf,问题是关于标题,似乎我使用的插件没有正确设置标题,所以我将从现在开始使用curl。谢谢=) –

回答

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 
+0

它的工作原理!谢谢! –

相关问题