Как автоматически вызвать мое промежуточное ПО для всех apis, которые у меня есть? - PullRequest
0 голосов
/ 18 октября 2019

Я создал службу Express для отправки электронных писем, сейчас я внедряю промежуточное программное обеспечение для аутентификации jwt, оно уже работает, теперь я хотел бы, чтобы это промежуточное программное обеспечение вызывалось автоматически для любого API, который у меня есть, или для тех, которые я создам.

Я попытался выполнить следующее назначение в своем корне, checkToken - это моя функция для промежуточного ПО

const app = express();
app.use(checkToken, require('./middlewares'))
app.use(`${config.URL_BASE}/email`, require('./apis/email'))
.
.
.

В настоящее время вызывать промежуточное ПО, которое я делаю, оно работает очень хорошо

router.post('', middleware.checkToken, async function (req, res) {
  const {
    type: typeCode,
.
.
.

он работает очень хорошо, но мой другой API не вызывает промежуточное ПО, я не хотел явно вызывать снова

Другой API

router.get('/health', async (req, res) => {
  res.status(200).send({ message: 'Ready.' })
})

Ответы [ 2 ]

2 голосов
/ 18 октября 2019

Чтобы связующее ПО вызывалось для всех маршрутов, просто наберите app.use(yourMiddleware), прежде чем какой-либо из маршрутов будет определен.

Чтобы связующее ПО вызывало один набор маршрутов, но не другие маршруты, поместите все маршрутывы хотите, чтобы промежуточное программное обеспечение вызывалось на конкретном маршрутизаторе с префиксом пути, который соответствует только подмножеству ваших маршрутов. Затем запустите промежуточное программное обеспечение на этом маршрутизаторе до того, как будет определен любой из его маршрутов.

Вот пример 2-го варианта:

const express = require('express');
const app = express();

// load and configure api router
app.use('/api', require('./apiRouter.js'));

app.listen(...);

Затем внутри apiRouter.js:

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

// middleware that is called for all api routes
router.use(myMiddleware);

// define api routes here
router.get('/list', ...)

module.exports = router;
1 голос
/ 18 октября 2019

router.use () монтирует промежуточное ПО для маршрутов, обслуживаемых конкретным маршрутизатором.

router.use(checkToken)
router.get('/health', getHandler)
router.post('/', postHandler)
module.exports = router
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...