我目前处于一种需要创建一个小型npm软件包以交付快速中间件的情况。目标是该中间件注册一个端点并将一些数据传递给客户端。通常,我只编写我的中间件软件,然后消费者以下列方式使用它:
expressApp.use('/mypath', myMiddelware)
但是我还将提供一个称为该端点的Angular模块。因此,我需要确保端点匹配。有了上面的代码,我的Middelware的使用者就可以控制路径。但是我想实现我的中间件是对路径的控制。因此,我选择了以下方法:
我的中间件
const myMiddelware = function(res, req, next){
if(req.path === '/mypath'){
res.send('some data')
}
}
使用这种方法,用户可以通过以下方式使用中间件:
expressApp.use(myMiddelware)
我在网上进行了大量搜索,但没有找到使用我的方法的示例。我也看到了我的做法的弊端。我的中间件软件将在所有请求上被调用,这将导致不必要的检查。
有人能解决这个问题吗?
答案 0 :(得分:1)
如果您的函数只应在一条路径上处理请求,则它不是真正的中间件。这是一个特定的请求处理程序。只需使用此:
app.get('/mypath', myRequestHandler)
然后,它是完全明确的。仅当请求为/mypath
时,您的请求处理程序才会被调用,并且您无需在请求处理程序中再次进行检查,并且当它的路径不正确时也不会调用您的函数。
如果您还想涵盖其他http动词,则可以分别指定它们,也可以使用app.all()
。
所有请求都将调用我的middelware,这将导致不必要的检查。
您的中间件不是真正的中间件。这是一个请求处理程序。因此,请勿将其作为中间件连接。将其附加为请求处理程序。然后,只有在路径与您要匹配的路径完全匹配时,它才会被调用。