Express crashes when GET path regex has named capture groups: Cannot read property 'name' of undefined at Layer.match
I want to handle a GET request and match some information from the URL. Consider this example:
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`);
});
The error you get if you try to visit the URL, such as /house/evergreen/25 is a 500 error that occurs even before the path handler runs. The full stack is this:
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)
If I just remove the named groups - so use the .get([REGEX_QUERY_NO_NAMES] ... the rest of the code works and will send, for example:
You are looking for house #25 in evergreen street
Why is this happening?
Via Active questions tagged javascript - Stack Overflow https://ift.tt/noNS1P7
Comments
Post a Comment