Эй, я изучал Узел как часть курса, где они сделали некоторую переменную равной функции
Что-то вроде этого
const authCheck = (req, res, next) => {
if (req.user) {
next()
} else {
res.redirect("http://localhost:3000/")
}
}
и затем они назвали это промежуточным программным обеспечением
router.post("/", authCheck, (req, res) => {
Теперь я обычно видел людей, называющих функцию, подобную этой authCheck()
Хотя это работает, я хотел понять разницу между обоими из них
router.post("/", authCheck, (req, res) => {
Эта строка фактически не вызывает функцию. Она передавала функцию как переменную в router.post()
.
Затем эта функция маршрутизатора будет во время вызова authCheck, как только запрос поступит в функцию маршрутизатора.
Итак, вы правы, что функции вызываются путем записи ()
за именем функции. Помните, что функции называются "первоклассными", что означает, что они могут использоваться как параметры, передаваемые, все, что вы можете сделать с переменной.
Если вы будете писать router.post("/", authCheck(), (req, res) => {
, вместо передачи функции authCheck в маршрутизатор, вы сразу же вызываете authCheck и передаете возврат authCheck в router.post().
function something (authCheck(), somethingElse)
параметра function something (authCheck(), somethingElse)
возвращение authCheck()
будет возвращением something
а somethingElse
authCheck()
никогда не будет выполнено. Следовательно, всякий раз, когда мы передаем функцию в качестве параметра, мы всегда должны использовать 'authCheck`?
something( authCheck(), somethingElse )
то будет вызвана функция что-то. Требуется два параметра. Второй параметр - это переменная somethingElse. Первый параметр будет тем, что возвращает authCheck. Я ожидаю, что authCheck вернется как объект, содержащий учетные данные пользователя.
authCheck()
вызовет функцию (кстати, без аргументов) ...authCheck
передает функцию в качестве аргументаrouter.post
в вашем примере - и что-то вrouter.post
может вызватьauthCheck
если требуется