表达正则表达式字符串表示法

时间:2014-09-05 02:03:47

标签: javascript regex node.js express

我是Javascript和正则表达式的新手,所以我对如何使路线匹配所有以/user/....

开头的网址感到困惑

我可以做app.get(/user/, function(req,req){ /*stuff*/});

但我想知道如果我用一个字符串代替正则表达式对象,我该怎么办呢。例如

app.get("/user/:id", function(req,req){ /*stuff*/});  

仅匹配具有"user"的网址和一个参数。我如何编码它以匹配"user"和N个参数

还有什么区别使用字符串或文字javascript正则表达式对象? 我发现即使用字符串表示法,我也可以做这样的事情......

app.get("/user/:d([a-z]*)", function (req, res) {

    //more stuff
});

1 个答案:

答案 0 :(得分:4)

我不确定如何传递单个路径的N个参数。但是,你可以做一些不同的路线,如:

var userController = requrie('./user_controller'),
  isAuthenticated = require('./middleware/is_authenticated');

app.get("/user/:id/address/:addressId", userController.addressById);
app.get("/user/:id/address", userController.address);
app.get("/user/:id", userController.index);

为了在执行控制器操作之前检查身份验证之类的内容,您可以使用中间件并将其作为控制器操作之前的第二个参数,这看起来像:

app.get("/user/:id", isAuthenticated, userController.index);

在上面的示例中,user_controller.js看起来像这样:

module.exports = {
  index: function(req, res) {
    // index action logic
  },
  address: function(req, res) {
    // address action logic
  },
  addressById: function(req, res) {
    // addressById action logic
  }
};

这将允许您将类似但不同的路由传递给不同的控制器操作,这样可以更好地控制如何对不同的路由进行分类,因为这比路由器工作更多,而不是控制器工作。

还有一点需要注意的是,路线的顺序很重要。通常最好首先从一组路线中放置更多特定路线,然后使用更多通用路线。

希望有所帮助!