@Dream8

Как правильно организовать маршрутизацию Express?

Привет, пишу web-aplication и возникла проблема с маршрутизацией.
Вот я подключаю контролеры для маршрутов:
var index = require('./routes/index');
var users = require('./routes/users');
var login = require('./routes/login');


Далее добавляю размещение файлов jade для контролеров и добавляю несколько плагинов:
var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(require('node-sass-middleware')({
  src: path.join(__dirname, 'public'),
  dest: path.join(__dirname, 'public'),
  indentedSyntax: true,
  sourceMap: true
}));
app.use(express.static(path.join(__dirname, 'public')));


А далее сами контролеры:
app.use('/', index);
app.use('/users', users);
app.use('/login', login);


Но проблема в том что контролер login не исполняется.
Вот и он сам:
var express = require('express');
var router = express.Router();

router.get('/login', function(req, res, next) {
    res.render('login', { title: 'login'});
});

module.exports = router;


Вся прелесть ситуации что все контролеры что перед login работают адекватно.
  • Вопрос задан
  • 310 просмотров
Решения вопроса 2
@rustler2000
погромист сикраш
Не скажу как надо "точно".
Но скажу как не надо.

0. Не надо регистрировать медленные и редкоиспользуемые обработчики раньше чаще вызываемых и более критических. Но надо блюсти зависимости. Помните - роутер регистрирует обработчики в листе(ок - массиве) и вызывает последовательно, в том порядке - в котором они были зарегистрированны.

1. Не надо ставить express-static/serve-static перед осовной логикой как советует dummyman (реальный ник). Выже не хотите, чтобы нода ходила на диск проверяя наличие файла каждый раз, даже когда надо всего лишь вернуть находящийся в памяти объект?

2. Не надо упускать обработчики 404 и 500. А то клиенту будет больно, а вам чуднО.

3. Не надо упускать, что nginx раздает статику офигенно быстро - ведь он использует sendfile тогда как нода будет
читать с диска и писать в сокет по кускам.
Не надо верить dummyman что nginx не умеет кэшировать статику.
Не надо верить мне - освойте ab (можно и strace чтобы офигеть как круто работает nginx со статикой).

4. Тут еще было про SO_REUSEPORT но это будет немного оффтопик.
Ответ написан
dummyman
@dummyman
диссидент-схизматик
Вся прелесть ситуации что все контролеры что перед login работают адекватно.
Тогда, возможно, ошибка кроется в роутере подключенном непосредственно перед login.
Не вижу у вас подключенного errorhandler, он бы помог локализовать ошибку.
для статики используй serve-static
вместо друшлака bodyParser используй body
вместо logger все уже года три как используют morgan.
Формочку входа прикрутили а где же обработка сессий? вот тут
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы