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

express regular expression string notation

本文关键字:表示 正则表达式 字符串      更新时间:2023-09-26

我是Javascript和正则表达式的新手,所以我有点纠结于如何使路由匹配以/user/.... 开头的所有URL

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

但我想知道,如果用字符串代替regex对象,我该怎么做。例如

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

仅匹配具有"user"和一个参数的URL。我该如何编码,使其匹配"user"和N参数

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

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

我不确定是否有方法传递单个路由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
  }
};

这将允许您将类似但不同的路由传递给不同的控制器操作,这将使您对如何分类不同的路由有更多的控制权,因为这更多的是路由器的工作,而不是控制器的工作。

还有一点需要注意,路线的顺序很重要。通常最好将一组路线中更具体的路线放在第一位,将更通用的路线放最后。

希望能有所帮助!