3

如何完成以下 KOA 路由处理程序:

app.get("/Chicago_Metro/Cicero_City", myFunctionHandler1)
app.get("/Cook_County/Cicero_City", myFunctionHandler2)

并以“芝加哥”作为要传递给“metro”的参数,或者传递给县的“Cook”和传递给“城市”的“Cicero”,在下面我的处理程序中:

function *myFunctionHandler1(metro, city) {
...
}

function *myFunctionHandler2(county, city) {
...
}

我正在考虑使用正则表达式,但我从未见过它如何与 :param 混合使用。

注意:我需要保留该路径语法,因为它已经按照上面的方式进行了 SEO 和索引。

最坏的情况可能我会以全名作为参数结束,并在单个 handlerFn 中处理它并测试 _metro 或 _county 或 _city 的结尾

4

1 回答 1

9

正则表达式捕获组

var koa   = require('koa'),
    route = require('koa-router'),
    app   = koa();

app.use(route(app));

app.get(/^\/(.*)(?:_Metro)\/(.*)(?:_City)$/, function *(){
    var metro = this.params[0];
    var city = this.params[1];
    this.body = metro + ' ' + city;
});

app.get(/^\/(.*)(?:_County)\/(.*)(?:_City)$/, function *(){
    var county = this.params[0];
    var city = this.params[1];
    this.body = county + ' ' + city;
});

app.listen(3000);
于 2015-01-06T22:14:59.410 回答