尝试在express.js中理解'nextnext()'时遇到困难

尝试在express.js中理解'nextnext()'时遇到困难,第1张

尝试在express.js中理解'next / next()'时遇到困难

Express使用具有回调的中间件函数(动作完成时调用的函数),而next具有此目的(这是触发Express堆栈中下一个中间件的回调)。所有Express中间件(与Connect兼容)具有3个参数:请求,响应,下一个(可选)。

例如,静态中间件提供静态文件,csrf中间件在接收POST请求时检查参数,并处理路由路由器中间件(上面粘贴的内容是其中的一部分)。

每个中间件都可以完成其任务,并

next
在满足某些条件的情况下调用队列中的中间件(例如,静态中间件不会调用下一个中间件,因为它会自行处理文件,以便路由器可以。)不会被打电话)。

在路由器中,您通常不调用

next
它,因为它往往是最后执行的中间件(除非您需要基准测试之类的东西)。

如果您要创建一个拒绝访问所有未登录用户的中间件,则

next()
仅在该用户登录后才必须调用(这样才能调用下一个中间件,在这种情况下,路由器可以使用户访问他们正在寻找的页面),否则您可能会将他们重定向到登录页面。

next
完全不接受任何参数或将错误作为参数。

编辑:根据您的配置,路由器在静态中间件之前,因此,如果要提供文件,则需要声明一个通配符路由,当路由不匹配时调用next():

app.get('*', function (req, res, next) {  // no route is matched  // so call next() to pass to the static middleware  next();});

注意:我不建议您将静态文件服务器放在路由器之后,建议您将其放在路由器之前,以便可以定义自己的自定义404路由。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5126906.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-17
下一篇2022-11-17

发表评论

登录后才能评论

评论列表(0条)

    保存