Express 4中间件不在DigitalOcean服务器上呼叫路由

我正在用io.js和Express 4创build一个API,我不知道为什么这不起作用。 我目前正在DigitalOcean液滴(Ubuntu 14.04)上运行该程序,并且不会调用next()方法而永远不会调用/执行。 该程序将通过https://<redacted>/asdf nginx逆向代理进行路由。

 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 + "."); 

当我在我的液滴上运行程序并向https://<redacted>/asdf/login发送POST请求时,控制台输出“Request received”,但不打印“Route / login accessible”。 奇怪的是,当发送请求发送到http://localhost:3000/login时,在我的本地机器上工作得很好。 有什么我做错了吗?还是这是一个我不知道的已知的东西?

Express在映射路由时使用请求的url属性,我怀疑你的nginx反向代理不会从它移除/asdf根目录。 如果是这样,你的url的路径将是/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/HttpRewritemodulee#rewrite