Express 4 中间件不调用 DigitalOcean 服务器上的路由
Express 4 middleware not calling routes on DigitalOcean server
我正在用 io.js 和 Express 4 创建一个 API,我不知道为什么这不起作用。我目前 运行 在 DigitalOcean droplet (Ubuntu 14.04) 上安装程序,它不会调用 next() 方法永远不会 called/executed。该程序正被 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 + ".");
当我 运行 我的 droplet 上的程序并向 https://<redacted>/asdf/login
发送 POST 请求时,控制台打印出 "Request received" 但没有打印出 "Route /login accessed".奇怪的是,当 post 请求发送到 http://localhost:3000/login
时,这在我的本地机器上工作得很好。是我做错了什么,还是这是我不知道的已知事情?
Express 在映射路由时使用请求的 url
属性,我怀疑您的 nginx 反向代理没有从中删除 /asdf
根。如果是这样,您的 url 的路径将是 /asdf/login
,这将解释为什么您的 /login
post 处理程序未被调用。要验证这个假设,您可以尝试将反向代理根添加到您的 use
中,如下所示:
app.use('/asdf', router);
如果是这种情况,要解决此问题,您可以配置 nginx 为您重写 url 像这样
location /asdf {
rewrite /asdf(.*) 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
我正在用 io.js 和 Express 4 创建一个 API,我不知道为什么这不起作用。我目前 运行 在 DigitalOcean droplet (Ubuntu 14.04) 上安装程序,它不会调用 next() 方法永远不会 called/executed。该程序正被 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 + ".");
当我 运行 我的 droplet 上的程序并向 https://<redacted>/asdf/login
发送 POST 请求时,控制台打印出 "Request received" 但没有打印出 "Route /login accessed".奇怪的是,当 post 请求发送到 http://localhost:3000/login
时,这在我的本地机器上工作得很好。是我做错了什么,还是这是我不知道的已知事情?
Express 在映射路由时使用请求的 url
属性,我怀疑您的 nginx 反向代理没有从中删除 /asdf
根。如果是这样,您的 url 的路径将是 /asdf/login
,这将解释为什么您的 /login
post 处理程序未被调用。要验证这个假设,您可以尝试将反向代理根添加到您的 use
中,如下所示:
app.use('/asdf', router);
如果是这种情况,要解决此问题,您可以配置 nginx 为您重写 url 像这样
location /asdf {
rewrite /asdf(.*) 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