当前位置:  开发笔记 > 编程语言 > 正文

每次在server.js上听到路径时都会执行express app.use

如何解决《每次在server.js上听到路径时都会执行expressapp.use》经验,为你挑选了1个好方法。



1> jfriend00..:

每次在server.js上听到路径时都会执行express app.use

这取决于您是否在任何app.use()语句中使用路径,这取决于所有app.use()语句是否将控制权传递给下一个处理程序,或者是否其中一些语句故意终止链并自行处理最终响应.

所有app.use()语句都被注册为中间件处理程序,用于命中该app对象的所有请求.如果它上面有一个特定的路径,那么只有在匹配该路径时才会调用它.如果它没有路径(如在您的示例中),则将考虑每个请求.

当调用给定的中间件处理程序时,它将从Express文档中传递三个参数,如本示例所示:

app.use(function (req, res, next) {
  console.log('Time: %d', Date.now());
  next();
});

注意,最后一个参数next.当一个中间件函数被调用时,它有三个主要的选择:它是如何工作的:

    它可以做一些事情,然后让请求继续给其他处理程序.

    它可以执行某些操作然后触发错误(例如,身份验证失败或缺少必需的会话cookie).

    它可以做一些事情,然后发送最终的响应(res.send(xxxx)),而不是将控制传递给其他处理程序.

将控制权传递给其他处理程序的机制是在完成处理后调用next(),并准备好让其他处理程序在此请求时获得破解.如果每个中间件处理程序调用next()它们看到的每个请求,那么将为每个请求调用所有app.use()处理程序.在上面的Express文档示例中,您可以看到这是一个非常简单的中间件处理程序.它只是记录请求的时间,然后调用next()将控制权传递给链中的下一个处理程序.

如果其中一个中间件处理程序没有调用next(),那么对于该请求,链中的所有处理程序都不会被调用该请求.


另外,您可以将中间件限制为仅限于某些URL路径.而不是打电话

app.use(example1)

您可以将路径包含为参数,例如:

app.use('/api', example1);

然后,只会为以中开头的路径调用此中间件/api.

或者,您可以类似地使用路由器来创建中间件分支.例如,如果您有一些中间件处理程序,您只想为以开头的请求调用/api,那么您可以为/apiURL上的前缀创建路由器,并将中间件处理程序附加到该路由器而不是应用程序对象,然后该路由器上的中间件处理程序仅/api针对以该路由器开头并因此指向该路由器的请求进行调用.

// create api router
var router = express.Router();

// register middleware that is called only when requests go through this router
router.use(example1);

// register normal get handler
router.get('/whatever', function(req, res) {...});

// hook api router into the app
app.use('/api', router);

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有