我在 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/sites-available/default
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 来运行 Node 应用程序
pm2 start nodetest.js
当发出发布请求时(使用 param1=foo 和 param2=var)我得到
param1: undefined param2: undefined
我希望您能帮助我,如果您需要更多信息,请告诉我
提前致谢
最佳答案
你的 nginx 配置对我来说似乎没问题。
在客户端,请确保正确设置 header 。例如:
如果您指定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
但是如果您不指定 header ,那么客户端将使用默认 header 。并且行为将是意想不到的:
$ curl -X POST -d '{"param1": "this_is_param_1", "param2": "this_is_param2"}' http://localhost:8081/test
param1: undefined param2: undefined
关于node.js - 无法从 nginx 反向代理后面的 Node 应用程序中的 post 请求获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42599887/