0
// ex: http://example.com/john_smith
app.get('/^(a-z)_(0-9)', function(req, res) {
    res.send('user'); 
});

//  ex: http://example.com/john_smith/messages/1987234
app.get('/^(a-z)_(0-9)/messages/:id', function(req, res) {
    res.send('message');
});

我为一个应用程序编写了上面的代码,我想将用户名作为 url 变量传递给 node.js,就像我会做的那样: $username = $_GET['username']; 在 PHP 中。我不太擅长编写正则表达式,所以我想看看是否有人可以让我走上正轨。提前致谢。

4

2 回答 2

0

您正在寻找req.params,它是正则表达式中所有捕获组的数组。
捕获组开始于1; req.params[0]是整场比赛。

于 2013-07-07T12:05:40.473 回答
0

根据您的要求,您似乎不需要正则表达式。只需在规则中使用 aa 变量,如下所示:

// Grabs whatever comes after /user/ and maps it to req.params.id
app.get('/user/:id', function (req, res) {
    var userId = req.params.id;
    res.send(userId);
});

如果你想有更好的控制,你可以使用正则表达式。要从表达式中获取您感兴趣的内容,请使用捕获组(通常表示为一组匹配的括号):

// Grabs the lowercase string coming after /user/ and maps it to req.params[0]
app.get(/^\/user\/([a-z]+)$/, function (req, res) {
    var userId = req.params[0];
    res.send(userId);
});

有点离题,但这里有一个非常好的 express.js 介绍,可以帮助您更好地理解它(包括路线如何工作): http ://evanhahn.com/understanding-express-js/

于 2013-07-08T14:10:58.557 回答