По какой-то причине мое промежуточное программное обеспечение выполняется дважды. Маршрутизатор выполняется только один раз, а промежуточное ПО - дважды. Я попытался удалить некоторые .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