有没有办法在单个函数调用上做到这一点?
var todo = function (req, res){};
app.get("/", todo);
app.get("/blabla", todo);
app.get("/blablablabla", todo);
就像是:
app.get("/", "/blabla", "/blablablabla", todo );
我知道这是一个语法混乱,但是仅仅为了给出我想要实现的目标的思路,一系列路由就很棒了!
有人知道怎么做吗?
有没有办法在单个函数调用上做到这一点?
var todo = function (req, res){};
app.get("/", todo);
app.get("/blabla", todo);
app.get("/blablablabla", todo);
就像是:
app.get("/", "/blabla", "/blablablabla", todo );
我知道这是一个语法混乱,但是仅仅为了给出我想要实现的目标的思路,一系列路由就很棒了!
有人知道怎么做吗?
Answers:
我在寻找相同功能时遇到了这个问题。
@Jonathan Ong在上面的评论中提到过,不建议将数组用于路径,但是在Express 4中对此进行了明确描述,并且可以在Express 3.x中使用。这是尝试的示例:
app.get(
['/test', '/alternative', '/barcus*', '/farcus/:farcus/', '/hoop(|la|lapoo|lul)/poo'],
function ( request, response ) {
}
);
从request
对象内部开始,路径为/hooplul/poo?bandle=froo&bandle=pee&bof=blarg
:
"route": {
"keys": [
{
"optional": false,
"name": "farcus"
}
],
"callbacks": [
null
],
"params": [
null,
null,
"lul"
],
"regexp": {},
"path": [
"/test",
"/alternative",
"/barcus*",
"/farcus/:farcus/",
"/hoop(|la|lapoo|lul)/poo"
],
"method": "get"
},
注意参数会发生什么:知道所有可能路径中的捕获组和参数,无论它们是否在当前请求中使用。
因此,可以很容易地通过数组堆叠多个路径,但是如果您希望从通过参数或捕获组使用的路径中拾取有用的任何东西,则副作用可能是无法预料的。对于冗余/别名,它可能更有用,在这种情况下,它将很好地工作。
编辑:请参阅下面的 @ c24w的答案。
编辑2:这是一个比较受欢迎的答案。请记住,与大多数Node.js库一样,ExpressJS是可移动的盛宴。尽管上面的路由仍然有效(目前我正在使用它,这是一个非常方便的功能),但我不能保证请求对象的输出(这肯定与我所描述的有所不同)。请仔细测试以确保获得所需的结果。
app.get('/:var(bla|blabla)?', todo)
:var
设置req.param
您不使用的。它仅在这种情况下用于设置正则表达式。
(bla|blabla)
将正则表达式设置为匹配,以便匹配字符串bla
和blablah
。
?
使整个正则表达式为可选,因此也匹配/
。
/bla(bla)?
也可以,但是之后的任何参数都无法正确填充(即/bla(bla)?/:value
,不会填充req.params.value
)。有人知道为什么吗?
req.params.var
,但你需要确保你req
传递给函数
就像您提到的那样,您实际上可以传递一系列路径,并且效果很好:
var a = ['/', '/blabla', '/blablablabla'];
app.get(a, todo);
需要您原始路线的文件并定义新路线,如下所示
var user = require('./users');
router.post('/login', user.post('/login'));