Промежуточное программное обеспечение 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

Другие вопросы по тегам