Промежуточное ПО в приложении express, выполненное дважды - PullRequest
0 голосов
/ 17 февраля 2020

По какой-то причине мое промежуточное программное обеспечение выполняется дважды. Маршрутизатор выполняется только один раз, а промежуточное ПО - дважды. Я попытался удалить некоторые .use, чтобы увидеть, помогает ли это, но я не могу сузить это ни к чему. Я не знаю, что вызывает это.

// route

import { Router } from 'express'

export default Router({ mergeParams: true }).post(
  '/v1/tickets/createTicket',
  async (req, res, next) => {
    res.send({message: success})
  }
)

// router - динамически создаваемое

export default () =>
  sync('**/*.js', { cwd: `${__dirname}/` })
    .map((filename) => require(`./${filename}`).default)
    .filter((router) => Object.getPrototypeOf(router) === Router)
    .reduce(
      (rootRouter, router) =>
        rootRouter
          .post('/v1/tickets/createTicket', isAuthenticated)
          .use(router),
      Router({ mergeParams: true })
    )

// middleware

export default async function(req, res, next) {
  console.log(req.path)
  return next()
}

// express Приложение

export default ({ logger }) =>
  express()
    .use(
      expressWinston.logger({
        winstonInstance: logger,
        msg:
          '{{res.statusCode}} {{req.method}} {{req.url}} {{res.responseTime}}ms',
        meta: false
      })
    )
    .use(urlencoded({ extended: true }))
    .use(json())
    .use(cors())
    .use('/api', router)
    .use((err, req, res, next) => {
      if (err instanceof SyntaxError && err.status === 400 && 'body' in err) {
        logger.error('Incorrect body structure')
        return res.sendStatus(400) // Bad request
      }
      let errorMessage = { error: err.error || err }
      logger.error(errorMessage.error)
      res.status(err.code || 500).json(errorMessage)
      res.end()
    })

вывод на консоль:

/v1/tickets/createTicket
/v1/tickets/createTicket
...