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
});
我正在尝试使用在文件 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
});