Express: могу ли я использовать несколько промежуточных программ в одном app.use? - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть много приложений, заполненных шаблонным кодом, который выглядит следующим образом:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(require('express-session')({
        secret: 'keyboard cat',
        resave: false,
        saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());

Как я могу использовать несколько промежуточных программ одновременно?Так что я мог бы превратить вышесказанное в:

// Some file, exporting something that can be used by app.use, that runs multiple middlewares
const bodyParsers = require('body-parsers.js')
const sessions= require('sessions.js')

// Load all bodyparsers
app.use(bodyParsers)

// Load cookies and sessions
app.use(sessions)

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Попробуйте так, в main app.js запустите только код инициализации:

const bodyParserInit = require('./bodyParserInit');
....
bodyParserInit(app);

А затем в bodyParserInit вы можете сделать app.use

module.exports = function (app) {
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({ extended: false }));
}
0 голосов
/ 27 сентября 2018

Мне нравится использовать Router для инкапсуляции маршрутов приложений.Я предпочитаю их списку маршрутов, потому что Router похож на приложение мини-экспресс.

Вы можете создать body-parsers маршрутизатор, например, так:

const {Router} = require('express');

const router = Router();

router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: false }));
router.use(cookieParser());
router.use(require('express-session')({
        secret: 'keyboard cat',
        resave: false,
        saveUninitialized: false
}));
router.use(passport.initialize());
router.use(passport.session());

module.exports = router;

Затем присоедините его кВаше основное приложение, как и любой другой маршрут:

const express = require('express');

const app = express();
app.use(require('./body-parsers'));
0 голосов
/ 27 сентября 2018

Вы можете указать несколько промежуточных программ, см. app.use docs :

Массив комбинаций любого из перечисленного.

Вы можете создать файл всех промежуточных программ, например -

middlewares.js

module.exports = [
  function(req, res, next){...},
  function(req, res, next){...},
  function(req, res, next){...},
  .
  .
  .
  function(req, res, next){...},
]

и просто добавить его, например:

/*
you can pass any of the below inside app.use()
A middleware function.
A series of middleware functions (separated by commas).
An array of middleware functions.
A combination of all of the above.
*/
app.use(require('./middlewares.js'));

Примечание - Делайте это только для тех промежуточных программ, которые будут общими для всех запросов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...