Полученная страница не найдена при использовании дополнительных аргументов в экспресс-маршрутизаторе

#javascript #node.js #express

Вопрос:

Итак, у меня есть обработчик 404 и файл маршрутизатора:

404 обработчик:

 app.all("*", (req, res, next) => {
    res.status(404).json({
      "status": "failed",
      "message": "woops, page not found..."
    })
})
 

Маршрутизатор:

 orderRouter.route('/')
        .post((req, res, next, optionalData) => {
            res.status(200).json({
                "status": "ok"
            })
        })

module.exports = orderRouter
 

Как мы видим, я добавляю дополнительные аргументы в промежуточное программное обеспечение, то есть «optionalData«.

Когда я получаю доступ к сообщению о маршруте / методе, я получаю результат 404.

Но когда я определяю, что optionalData = не определено, это работает. Я получил результаты «статус»: «ок».

 (req, res, next, optionalData = undefined)
 

Но почему? что здесь происходит..

Ответ №1:

Ожидается, что обработчики регулярных запросов Express будут иметь не более 3 аргументов, как вы можете убедиться здесь.

И глядя вверх Function.length :

длина является свойством объекта функции и указывает, сколько аргументов ожидает функция, т. е. количество формальных параметров. Это число исключает параметр rest и включает только параметры перед первым со значением по умолчанию.

Становится понятно, почему вторая функция работает, а первая-нет:

 (function(a, b, c, d = undefined) {}).length === 3
(function(a, b, c, d) {}).length === 4