Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript express正则表达式字符串表示法_Javascript_Regex_Node.js_Express - Fatal编程技术网

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

Javascript express正则表达式字符串表示法,javascript,regex,node.js,express,Javascript,Regex,Node.js,Express,我不熟悉Javascript和正则表达式,所以我一直在研究如何使路由匹配所有以/user/…开头的URL 我可以做app.get(/user/,function(req,req){/*stuff*/}) 但我想知道如果我用一个字符串代替regex对象,我怎么能做到这一点。比如说 app.get("/user/:id", function(req,req){ /*stuff*/}); 仅将URL与“user”和一个参数匹配。如何对其进行编码,使其匹配“用户”和N个参数 使用字符串或文字jav

我不熟悉Javascript和正则表达式,所以我一直在研究如何使路由匹配所有以
/user/…
开头的URL

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

但我想知道如果我用一个字符串代替regex对象,我怎么能做到这一点。比如说

app.get("/user/:id", function(req,req){ /*stuff*/});  
仅将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\u 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
  }
};
这将允许您将类似但不同的路由传递给不同的控制器操作,这将使您对如何排序不同的路由有更多的控制,因为这是路由器的工作,而不是控制器的工作

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


希望有帮助

我不确定是否有方法传递单个路由参数。但是,您可以执行以下几种不同的路线:

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\u 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
  }
};
这将允许您将类似但不同的路由传递给不同的控制器操作,这将使您对如何排序不同的路由有更多的控制,因为这是路由器的工作,而不是控制器的工作

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



希望有帮助

get
不是那样工作的。。。另外,如果要将动态字符串用作正则表达式,然后使用
RegExp
constructor@AmitJoki什么意思
get
不是那样工作的…我使用的一个教程将传递字符串作为
get
方法的regex参数使用字符串和regexp的区别在于,任何regexp捕获组都只能通过索引访问,而字符串形式支持“命名捕获组“@mscdex这是唯一的区别吗?我记得在某个地方读到,使用regex文本比仅仅使用strings
get
提供了更多的功能,但这样做是行不通的。。。另外,如果要将动态字符串用作正则表达式,然后使用
RegExp
constructor@AmitJoki什么意思
get
不是那样工作的…我使用的一个教程将传递字符串作为
get
方法的regex参数使用字符串和regexp的区别在于,任何regexp捕获组都只能通过索引访问,而字符串形式支持“命名捕获组”。@mscdex是唯一的区别吗?我记得在某个地方读到,使用regex文本比使用strings提供了更多的功能,如果我想让每个
/user/..
调用都通过一个常规路径(检查用户是否仍然登录),那么将此作为第一个路由是有意义的,对吗?啊,我知道你想要做什么。我不确定是否有方法来检查auth,但这篇博文对如何在特定路由上通过中间件进行路由有很好的解释,这可能对你有用。在我的泛型
/user/…
中,我只是把
如果(!req.session.uname)重定向(“/login”);
这是检查用户是否登录的一种方法吗?通常,您会在用户计算机上存储一些会话变量和cookie,需要以某种方式组合这些变量和cookie以检查它们是否真正经过身份验证。但是,是的,只要您在用户登录时将其用户名存储在req.session.uname中,这或多或少会起作用。此外,您需要
res.redirect(“/login”);
(使用
res
对象上的
redirect
方法。另一方面,我强烈建议您研究更健壮的身份验证,而不仅仅是检查会话变量。哦,是的,我的意思是
res.redirect
。谢谢您的帮助!但是我还可以使用哪些其他形式的身份验证?您是在谈论类似的东西吗passportjs?如果我想让每个
/user/..
调用都通过一个常规路径(检查用户是否仍然登录),该怎么办,那么将此作为第一个路由是有意义的,对吗?啊,我知道你想要做什么。我不确定是否有方法来检查auth,但这篇博文对如何在特定路由上通过中间件进行路由有很好的解释,这可能对你有用。在我的泛型
/user/…
中,我只是把
如果(!req.session.uname)重定向(“/login”);
这是检查用户是否登录的一种方法吗?通常,您会在用户计算机上存储一些会话变量和cookie,需要以某种方式组合这些变量和cookie以检查它们是否真正经过身份验证。但是,是的,只要您在用户登录时将其用户名存储在req.session.uname中,这或多或少会起作用。此外,您还需要
res.redirect(“/login”);
(使用
res
对象上的
redirect
方法