Express 4:如何在文件名结构的动态路由中捕获参数?

时间:2017-11-15 18:22:32

标签: node.js regex express url url-routing

我正在尝试在文件URL部分中使用包含部分路径的Express 4路由端点 - 文件名。它用于动态生成的图像。我认为最好用例子来描述......

我现在拥有什么

现在我的路线中有这样的东西:

app.get('/api/listing/:id/cover.png', viewListingImage)

例如此网址http://localhost:9500/api/listing/750/cover.png与ID为750的列表匹配。

期望

我想要的是URL,最后一部分是带有列表ID的文件名。所以我可以使用该文件名快速保存在本地。 E.g。

http://localhost:9540/api/listing/750-cover.png

所以基本上,我想用连字符替换正斜杠。

尝试了一些RegEx魔法,但没有运气。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您可以在路线中使用正则表达式:

const app = require('express')();

// match /api/listing/ddd-filename
// where ddd is a series of digits
app.get(/\/api\/listing\/(\d+)-([^\/]+)/, function(req, res) {
    console.log(req.params);
    res.send("hello");
});

app.listen(80);

然后,如果您请求/api/listing/20-cover.png之类的网址,您会在请求处理程序中找到:

req.params[0] === '20'
req.params[1] === 'cover.png';

正如所述here所述,将正则表达式中的捕获组放入req.params。

正如我在评论中所说,你也可以这样做:

app.get('/api/listing/:filename', function(req, res) {
    // parse req.params.filename yourself here
});