我目前处于这样一种情况,我需要创建一个小型的npm软件包来提供快速的middelware。目标是这个middelware注册一个端点并将一些数据传递给客户端。通常我会写我的middelware然后消费者以下列方式使用它:
expressApp.use('/mypath', myMiddelware)
但我还将提供一个将调用此端点的Angular模块。因此,我需要确保端点匹配。使用上面的代码,我的middelware的消费者可以控制路径。但我希望实现我的middelware控制路径。因此我选择了以下方法:
我的中间件
const myMiddelware = function(res, req, next){
if(req.path === '/mypath'){
res.send('some data')
}
}
通过这种方法,用户可以通过以下方式使用中间件:
expressApp.use(myMiddelware)
我在网上搜索了很多,并没有找到一个使用我的方法的例子。我也看到了我的方法的缺点。我的middelware将被调用所有请求,导致不必要的检查。
有没有人能解决这个问题呢?
如果你的函数应该只在一条路径上处理请求,那么它不是真正的中间件。这是一个特定的请求处理程序。只要用这个:
app.get('/mypath', myRequestHandler)
然后,这完全是明确的。您的请求处理程序仅在请求为/mypath
时被调用,并且您不需要在请求处理程序内再次检查它,并且当它不是正确的路径时不会调用您的函数。
如果您还要覆盖其他http动词,可以单独指定它们,也可以使用app.all()
。
我的middelware将被调用所有请求,导致不必要的检查。
您的中间件不是真正的中间件。这是一个请求处理程序。所以,不要将它作为中间件附加。将其作为请求处理程序附加。然后,当路径完全匹配您想要匹配的路径时,它将仅被调用。