Express 4的中间件不是要求DigitalOcean服务器上的路线(Express 4 mid

2019-10-23 02:44发布

我瞎搞与创建与io.js和Express 4的一个API,我不知道为什么,这是行不通的。 我目前运行在DigitalOcean液滴程序(Ubuntu的14.04),并且它不调用next()方法不会被调用/执行。 该方案被路由到由反向代理具有的nginx在https://<redacted>/asdf

var express = require('express');
var app = express();

var port = process.env.PORT || 3000;

var router = express.Router();

router.use(function(req, res, next) {
    console.log("Request received.");
    next();
});

router.post('/login', function(req, res) {
    console.log('Route /login accessed');
});

app.use('/', router);

app.listen(port);
console.log("Server started on port " + port + ".");

当我在我的液滴运行的程序和发送POST请求https://<redacted>/asdf/login ,控制台打印出“收到的请求”,但并没有打印出“路线/登录访问”。 奇怪的是,当一个POST请求被发送到这个工作完全正常我的本地机器上http://localhost:3000/login 。 是不是我做错了,或者这是我不知道的一个已知的东西吗?

Answer 1:

Express使用请求的url属性映射路由时,我怀疑你的nginx的反向代理不删除/asdf从它的根。 如果是这样,您的网址的路径是/asdf/login这可以解释为什么你的/login不被调用后处理程序。 为了检验这一假设,你可以尝试添加反向代理根你use这样的:

app.use('/asdf', router);

如果是这样的情况下,要解决这个问题,你可以配置Nginx重写的URL,你这个样子

location  /asdf {
  rewrite /asdf(.*) $1  break;
  proxy_pass         http://localhost:3200;
  proxy_redirect     off;
  proxy_set_header   Host $host;
}

更多细节: https://serverfault.com/questions/379675/nginx-reverse-proxy-url-rewrite http://wiki.nginx.org/HttpRewriteModule#rewrite



文章来源: Express 4 middleware not calling routes on DigitalOcean server