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

Express 4: How to catch param in dynamic route structured like file name?

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


我现在拥有的

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

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

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

预期

我想要的是 URL 最后一部分是一个文件名,其中包含列表 ID。所以我可以使用该文件名快速将其保存在本地。例如

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

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


尝试了一些 RegEx 魔术,但运气不佳。感谢您的帮助!

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

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);

然后,如果你请求一个URL比如/api/listing/20-cover.png,你会发现在请求处理程序中:

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

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


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

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