一尘不染

express.js-单个行中多个路由的单个路由处理程序

node.js

有没有办法在单个函数调用上做到这一点?

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

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

就像是:

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

我知道这是一个语法混乱,但是只是为了给我一个我想实现的目标一个思路,一系列路由就很棒了!

有人知道怎么做吗?


阅读 241

收藏
2020-07-07

共1个答案

一尘不染

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

@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会发生什么:知道所有可能路径中的捕获组和param,无论它们是否在当前请求中使用。

因此,可以很容易地通过数组堆叠多个路径,但是如果您希望从通过参数或捕获组使用的路径中拾取任何有用的东西,副作用可能是无法预料的。对于冗余/别名,它可能更有用,在这种情况下,它将很好地工作。

编辑2:这是一个比较受欢迎的答案。请记住,与大多数Node.js库一样,ExpressJS是可移动的盛宴。尽管上面的路由仍然可以工作(目前我正在使用它,这是一个非常方便的功能),但是我不能保证请求对象的输出(这肯定与我所描述的不同)。请仔细测试以确保获得所需的结果。

2020-07-07