Промежуточное программное обеспечение Express 4 не вызывает маршруты на сервере DigitalOcean
Я возиться с созданием API с io.js и Express 4, и я понятия не имею, почему это не работает. В настоящее время я запускаю программу на дроплете 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
консоль распечатывает "Запрос получен", но не распечатывает "Маршрут / вход в систему осуществлен". Странно то, что это прекрасно работает на моем локальном компьютере, когда отправляется запрос http://localhost:3000/login
, Есть ли что-то, что я делаю неправильно, или это известная вещь, о которой я не знаю?
1 ответ
Экспресс использует запрос 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/HttpRewriteModule