В модульной установке node.js почему не всегда требуются connect-flash или expression-session в файлах, содержащих инструкции req.flash ()? - PullRequest
0 голосов
/ 29 сентября 2019

Я тестирую пакеты express-session и connect-flash. Я заметил, что в простой модульной установке мне не нужно включать эти пакеты в каждый файл, который их использует.

Например, следующая базовая установка выполняется без ошибок, но я не уверен, почему. routeb.js использует req.flash(), но не включает ни пакет, ни связанный шаблон.

app.js

"use strict";

const express = require('express');

const routeA = require('./controllers/routea');
const routeB = require('./controllers/routeb');

const app = express();

app.use(routeA);
app.use(routeB);

app.set('view engine', 'ejs');

app.listen(8080);

routea.js

"use strict";

const express = require('express');
const session = require('express-session');
const flash = require('connect-flash');

const router = express.Router();

router.use(session({
    secret: 'keyboard cat',
    resave: true,
    saveUninitialized: true
}));
router.use(flash());

router.use( function(req, res, next) {
    res.locals.redirectToPageA = req.flash('redirectToPageA');
    next();
});

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

module.exports = router;

routeb.js Этот файл меня смущает. Я вызываю req.flash (), сообщение пересылается и корректно отображается на pagea.ejs и не выдает ошибку. Однако в этом файле я не включил express-session или connect-flash и соответствующий шаблон.

"use strict";

const express = require('express');
const router = express.Router();

router.get('/pageb', function(req, res, next) {
    req.flash('redirectToPageA', 'I was just redirected to page a.');
    res.redirect('pagea');
});

module.exports = router;

из pagea.ejs

<%= redirectToPageA  %>
...