我在nodejs中创建一个中间件函数并表达js框架,我想检查url是否包含一个数字或者不是这样的
/发票/ 21或/发票/ 45
所以我想做这样的事情
if (req.path.startsWith('/invoices/[^0-9]') {
next();
}
但我收到错误我仍然无法做到这一点,任何人都可以提示。
最快的方法是检查RegExp
if(RegExp(/^\/invoices\/[0-9]/).test(req.path)){
// do something
}
你不能使用这样的RegExp。 startsWith只接受一个字符串。此代码创建一个RegExp,并使用match来检查字符串是否与RegExp匹配。
if (req.path.match(new RegExp('/invoices/[^0-9]'))) { // create a regexp and check if it matches
next();
}
startsWith接收字符串而非正则表达式。在这种情况下你可以使用match。
var str = '/invoices/120';
if (str.match(/^\/invoices\/\d+/)) { // return truly value
next(); // gets executed
}
var str = '/invoices/abc';
if (str.match(/^\/invoices\/\d+/)) { // return falsy value
next();
}
你可以在jsfiddle查看。
const re = /^\/invoices(\/.*)?\/\d*\//
if(re.test(req.originalUrl.toLowerCase())) {
// include a number
}
//'/invoices/kk/190/foo' will pass
//'/invoices/kk/190k/foo' won't pass
你使用什么版本的快递?我只能通过req.originalUrl访问路径,没有req.path。