Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Передача дополнительных переменных в роутер

Доброго!
Не совсем ещё втянулся в прелести Node.JS, потому туплю..
В принципе, тривиальный сервер app.js
router = require('./routes'); // Каталог с роутерами var isDebug = true; // Переменная для примера (которую и хочется передать) var port = 666; var app = express(); app.listen(port, function(){ console.log('SERVER STARTED AT PORT: ' + port); }); router(app, connection, isDebug); // Передали переменую
Далее, в ./routes/index.js
var users = require('./users'); // Куда будем отсылать module.exports = function (app, isDebug) { app.get('/users', users.login); // <-- Вот как именно сюда передать isDebug??? };
Очередным параметром - не хочет, ругается:
Error: Route.get() requires callback functions but got a [object Boolean]
А если далать сразу ./routes/index.js, к примеру, так:
module.exports = function (app, connection, isDebug) { app.get('/users', function (req, res) { if (isDebug) console.log('Trying auth...'); }); };
Всё работает, но так накопится очень много кода в ./routes/index.js, который хотелось бы разделить.. Для примера, ./routes/user.js
var login = function (req, res) { if (isDebug) console.log('Trying auth...'); }; module.exports.login = login;
Всё, естесственно, упрощено. Как бы это поизящнее оформить, посоветуйте, пожалуйста, коллеги?


Ответ

Один из простых вариантов добавления неких дополнительных параметров в обработку запроса - middleware. Например в корневом роутере:
router.use(function (req, res, next) { req.yourVar = "something"; req.isDebug = true; next(); });
или на уровне приложения
app.use(function (req, res, next) { req.yourVar = "something"; req.isDebug = true; next(); });
Дополнительную информацию можно найти здесь

Комментариев нет:

Отправить комментарий