查看一些Node.js Express代码,我看到了这个路由列表:
app.all('/user/:id/:op?', user.load);
app.get('/user/:id', user.view);
app.get('/user/:id/view', user.view);
app.get('/user/:id/edit', user.edit);
app.put('/user/:id/edit', user.update);
运行时,我注意到/user/:id
的请求实际上已路由到user.load
。对此我不熟悉,我很惊讶。
:op?
在第一行中做了什么导致它捕获不太具体的路线?我无法在Express documentation中找到:op?
的任何实例。
答案 0 :(得分:2)
来自app.all
的文档:
此方法对于映射" global"非常有用。的逻辑 特定路径前缀或任意匹配。
现在让我们来看看路由。
?
中的问号app.all('/user/:id/:op?', user.load)
表示路线中的参数:op
(可被视为"操作" )可选的。
由于all
方法调用放在其他路由调用之前,与路由/user/:id/
,/user/:id/view
和/user/:id/edit
匹配的所有内容都将首先通过{{1 }} 方法。值得一提的是,user.load
作为参数很可能不会在:op
中扮演任何特定角色,但在路线中扮演占位符。
这种方法很可能有助于在继续进行user.load
或view
操作之前检查数据库中是否存在实体。
另外,请记住@apsillers comment以及文档中引用的引文,edit
方法可能会在回调结束时调用user.load
,以便与其他路径一起进行匹配。
答案 1 :(得分:0)
我完全不知道这段代码是什么,或者代码是什么。
但我猜想,正如:id
用于存放用户的ID一样,:op?
将用于选择(?
)占位 op < / i> eration(例如我们在其下面看到的view
或edit
)