我希望处理GET请求并匹配URL中的一些信息.请考虑以下示例:
const REGEX_QUERY = /^\/?house\/(?<street>[a-z]+)\/(?<house>[0-9]+)$/i;
const REGEX_QUERY_NO_NAMES = /^\/house\/([a-z]+)\/([0-9]+)$/i;
app.get([REGEX_QUERY], async (req, res, next)=>{
res.setHeader("Content-Type", "text/plain");
const match = REGEX_QUERY.exec(req.path);
res.send(`You are looking for house #${match.groups.house} in ${match.groups.street} street`);
});
如果您try 访问URL,得到的错误(如/house/evergreen/25
)是一个500错误,甚至在路径处理程序运行之前就会发生.整个堆栈是这样的:
TypeError: Cannot read property 'name' of undefined
at Layer.match (/MY_EXPRESS_PROJECT/node_modules/express/lib/router/layer.js:147:20)
at matchLayer (/MY_EXPRESS_PROJECT/node_modules/express/lib/router/index.js:585:18)
at next (/MY_EXPRESS_PROJECT/node_modules/express/lib/router/index.js:226:15)
at SendStream.error (/MY_EXPRESS_PROJECT/node_modules/serve-static/index.js:121:7)
at SendStream.emit (events.js:400:28)
at SendStream.error (/MY_EXPRESS_PROJECT/node_modules/send/index.js:270:17)
at SendStream.onStatError (/MY_EXPRESS_PROJECT/node_modules/send/index.js:417:12)
at next (/MY_EXPRESS_PROJECT/node_modules/send/index.js:731:16)
at onstat (/MY_EXPRESS_PROJECT/node_modules/send/index.js:720:14)
at FSReqCallback.oncomplete (fs.js:192:21)
如果我只删除指定的组-所以使用.get([REGEX_QUERY_NO_NAMES] ...
,其余的代码就可以工作并将发送,例如:
You are looking for house #25 in evergreen street
为什么会发生这种事?