我在这条路线上遇到了问题:
app.get('/project/:handle/browse/:filepath(.*)/children', files.children); //getting contents of any node in the directory structure
我希望路由解析包含 :filepath
参数(可以包含斜杠)的 url,然后是 /children
操作。 (.*)
是我对 :filepath
参数设置正则表达式限制的失败尝试。
我想使用这样的方案来实现永久链接,因此将一些路由参数移动到参数不是一个选项,并且 URI 编码会使它们变得丑陋......我环顾四周,但似乎所有答案都在stackoverflow 适合在 url 末尾带有斜杠的参数,例如:
app.get('/project/:path', files.children);
有什么想法吗?
谢谢!
最佳答案
根据 gustavohenke 的评论,我决定使用正则表达式路由。这是工作代码!
app.get(/project\/(([a-z]|[A-Z]|[0-9])+)\/browse\/(.+)\/children/,
function(req,res)
{
req.params.handle = req.params[0]; //project handle
req.params.filepath = req.params[2]; //relative path
files.children(req, res);
}
); //getting contents of any node in the directory structure
诀窍是要知道,每当您在路由中使用 (something)
部分时,url 的每个“切片”都将在 req.params[] 数组中可用。使用内联回调函数,并使用它将数组的每个元素复制到 Controller 操作中人类可读的参数...然后正常调用 Controller 方法。
对于正则表达式本身,我通过编写 \/
转义了正则表达式中的 /
(斜杠),并使用了 (.+)
语句,这意味着“任何字符 (.)
至少一次 (+
)。如果您想要任何字符零次或多次,您可以使用 (.*)
感谢您为我指明了正确的方向。
关于regex - NodeJS + Express 3 - Route 中的斜线然后固定操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19094844/