node.js - 无法从 nginx 反向代理后面的 Node 应用程序中的 post 请求获取数据

标签 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/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/

相关文章:

node.js - 如何将 cookie 从 apollo-server 传递到 apollo-clenet

javascript - 当 bool 结果为 true 时,ElementFinder.filter 函数不返回值

node.js - 是否可以使用 Nodejs 开发桌面应用程序?

ruby-on-rails - Rails 3.2 Nginx Unicorn 总是尝试从公共(public)文件夹加载index.html (403)

node.js - 502 Bad Gateway 在 Elastic Beanstalk 上部署 Express Generator 模板

node.js - 在 Node.js Web 服务器中确定用户角色并授予 API 访问权限的正确方法是什么?

node.js - Dialogflow - 使用异步/等待从数据库读取

ruby-on-rails - 无法在 WSL 下使用乘客和 https 在 nginx 上启动 Rails 应用程序 - 端口正在使用

nginx - 如何解决 Nginx "proxy_pass 502 Bad Gateway"错误

azure - 带有 Nginx 的 AKS 无法通过 IP 访问,只能通过 DNS 访问