在Express.js中,我如何编写路由/正则表达式以捕获所有美国州?

时间:2012-08-27 09:09:15

标签: regex node.js express

目前我的字符串中的状态如下:

var states = 'AL|AK|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL...';

我想抓拍

  

mydomain.com/CA/more-stuff

分成两个独立的参数。第一个带有状态信息,第二个带有附加信息。我知道如何获得更多信息:

app.get('/' ??? + '/:additional', ...);

如何捕获状态信息?

2 个答案:

答案 0 :(得分:2)

如果您将其定义为路径中的参数...

app.get('/:stateabbr/:additional', ...);

您可以使用app.param()验证它:

app.param('stateabbr', function (req, res, next, abbr) {
    var stateAbbrs = /AL|AK|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|../i

    if (stateAbbrs.test(abbr)) {
        next()
    } else {
        next(new Error('Unrecognized State abbreviation.'));
    }
});

答案 1 :(得分:1)

试试这个

var states = 'AL|AK|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL...';
app.get('/:state('+ states + ')/:additional', function(req,res,next){
    res.send('state:'+req.params.state+',additional:'+req.params.additional);
})

我已经测试了它,它应该按照你的要求工作:)