Javascript 验证常量字符串加上任何变量文本

Javascript 验证常量字符串加上任何变量文本,javascript,node.js,regex,express,middleware,Javascript,Node.js,Regex,Express,Middleware,我正在使用nodejs中express的中间件,该中间件验证路由是否不同于“登录”或“登录”,但我还需要验证它是否不同于激活路由加上我的令牌(“/api/activation/+token”),也就是说,我有以下内容: If(req.path ¡= '/api/login' && req.path != '/api/signin'){ //execute verification middleware }else{ //allow access to the route //e

我正在使用nodejs中express的中间件,该中间件验证路由是否不同于“登录”或“登录”,但我还需要验证它是否不同于激活路由加上我的令牌(“/api/activation/+token”),也就是说,我有以下内容:

If(req.path ¡= '/api/login'  && req.path != '/api/signin'){
//execute verification middleware
}else{
//allow access to the route
//exclude verification
}
因此,我还需要从验证中排除激活路径和我的令牌。 其工作方式如下:

//(assuming eyJajau is my token)
If(req.path ¡= '/api/login'  && req.path != '/api/signin' && req.path != '/api/activate/eyJajau'){
//execute middleware
} else{
//allow access to the route
}
但问题是标记每次都会更改,因此我需要验证我的“if”语句,如果字符串与我的路径加上任何单词不同,它将是这样的:

/api/activation/  +  any word and number
换句话说,每一个包含“/api/active/”和其他任何内容的Sting都应该进入“else”语句 我想可以用正则表达式,但我不知道怎么用


因此,我需要验证req.path是否不同于激活路径加上任何Sting。

要排除带有
/api/activation/
后跟任何字符或数字的请求,可以使用以下命令:
/\/api\/activate\/\w+/
。我还将反转逻辑,使您的代码看起来像:

if (req.path === '/api/login' ||
    req.path === '/api/signin' ||
    /\/api\/activate\/\w+/.test(req.path) {
    // allow access
} else {
    // validate/verificate request
}

要排除后跟任何字符或数字的
/api/activation/
请求,可以使用以下命令:
/\/api\/activate\/\w+/
。我还将反转逻辑,使您的代码看起来像:

if (req.path === '/api/login' ||
    req.path === '/api/signin' ||
    /\/api\/activate\/\w+/.test(req.path) {
    // allow access
} else {
    // validate/verificate request
}

使用正则表达式&确保在开头和结尾锚定它:

If( req.path === '/api/login'
 || req.path === '/api/signin'
 || req.path.match(/^\/api\/activate\/\w+$/)
) {
    // allow access to the route
} else{
    // execute middleware to authenticate or verify user
}
如果愿意,可以将其缩短为单个或正则表达式以检查路径:

If(path.match(/^\/api\/(login|signin|activate\/\w+)$/)) {
    // allow access to the route
} else{
    // execute middleware to authenticate or verify user
}

使用正则表达式&确保在开头和结尾锚定它:

If( req.path === '/api/login'
 || req.path === '/api/signin'
 || req.path.match(/^\/api\/activate\/\w+$/)
) {
    // allow access to the route
} else{
    // execute middleware to authenticate or verify user
}
如果愿意,可以将其缩短为单个或正则表达式以检查路径:

If(path.match(/^\/api\/(login|signin|activate\/\w+)$/)) {
    // allow access to the route
} else{
    // execute middleware to authenticate or verify user
}

我不知道这是否是最好的方法,但我找到了解决问题的方法,使用子字符串。 详情如下:

if( req.path != '/api/login' && req.path != '/api/signin' && req.path.substring(0,21) != '/api/activateaccount/' ){
  //validate verificate reques
}else{
  //allow access
}

你怎么看?

我不知道这是否是最好的方法,但我找到了解决问题的方法,使用子字符串。 详情如下:

if( req.path != '/api/login' && req.path != '/api/signin' && req.path.substring(0,21) != '/api/activateaccount/' ){
  //validate verificate reques
}else{
  //allow access
}

你觉得怎么样?

我一直在寻找第二种选择,但当我尝试你的例子时,它不会让我通过。它总是转到else语句。我使用“/api/activate/token”作为路径,这意味着您的激活令牌除了单词chars之外还有其他一些字符。试试这个正则表达式:
/^\/api\/(login | sign | activate\/.*)$/
我一直在寻找类似于第二个选项的东西,但当我尝试你的示例时,它不会让我通过。它总是转到else语句。我使用“/api/activate/token”作为路径,这意味着您的激活令牌除了单词chars之外还有其他一些字符。试试这个正则表达式:
/^\/api\/(login | signin | activate\/.*)$/
它工作得很好,我在测试同一个正则表达式,但我的错误是我使用了“&&&”操作符而不是“| |”操作符只是为了学习其他东西。。。您认为使用“&&”运算符可以实现吗?怎么会是这样?@crazyProgrammer:A逻辑
(NOT(A)和NOT(b))
NOT((A)或(b))
是一样的。它工作得很好,我在测试同一个正则表达式,但我的错误是我使用了“&&”操作符而不是“| |”操作符只是为了学习其他东西。。。您认为使用“&&”运算符可以实现吗?怎么会是这样?@crazyProgrammer:A逻辑
(NOT(A)和NOT(b))
非((A)或(b))相同