Js-单行中多个路由的单个路由处理程序

有没有一种方法可以在单个函数调用中实现这一点?

var todo = function (req, res){};


app.get("/", todo);
app.get("/blabla", todo);
app.get("/blablablabla", todo);

比如:

app.get("/", "/blabla", "/blablablabla", todo );

我知道这是一个语法混乱,但只是为了给出我想要实现的想法,一个路由数组将是非常棒的!

有人知道怎么做吗?

116165 次浏览
app.get('/:var(bla|blabla)?', todo)

:var设置您不使用的 req.param。它只在本例中用于设置正则表达式。

(bla|blabla)将正则表达式设置为匹配,因此它匹配字符串 blablablah

?使整个正则表达式成为可选的,因此它也匹配 /

你实际上可以传递一个 路径数组路径数组,就像你提到的,它工作得很好:

var a = ['/', '/blabla', '/blablablabla'];
app.get(a, todo);

我在寻找相同功能时遇到了这个问题。

@ 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"
},

注意 params 的情况: 它知道所有可能路径中的捕获组和 params,不管它们是否在当前请求中使用。

因此,通过一个数组叠加多个路径可以很容易地完成,但是如果你希望从通过参数或捕获组使用的路径中获取任何有用的信息,那么副作用可能是不可预测的。它可能对冗余/别名更有用,在这种情况下它会工作得很好。

编辑: 请参阅@c24w 的答案 下面

编辑2: 这是一个比较流行的答案。请记住,ExpressJS 与大多数 Node.js 库一样,都是流动的飨宴的。虽然上面的路由仍然可以工作(我目前正在使用它,这是一个非常方便的特性) ,但我不能保证请求对象的输出(它肯定与我所描述的不同)。请仔细测试,以确保您得到预期的结果。

详细介绍一下 凯文的回答,这是来自 4.x 文档:

调用中间件函数的路径; 可以是:

  • 表示路径的字符串。
  • 一种路径模式。
  • 匹配路径的正则表达式模式。
  • 以上任何一种组合的数组。

他们有一些 例子,包括:

这将匹配从 /abcd/xyza/lmn/pqr开始的路径:

app.use(['/abcd', '/xyza', /\/lmn|\/pqr/], function (req, res, next) {
next();
});

我去了:

['path', 'altPath'].forEach(function(path) {
app.get(path, function(req, res) { etc. });
});