Javascript express正则表达式字符串表示法
我不熟悉Javascript和正则表达式,所以我一直在研究如何使路由匹配所有以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
/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文本比仅仅使用stringsget
提供了更多的功能,但这样做是行不通的。。。另外,如果要将动态字符串用作正则表达式,然后使用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
方法