You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express.js中如何将剩余URL路径全部映射为单个参数?

实现方法

第一步:修改路由定义

Express 默认的路由参数匹配不会识别路径中的斜杠,只会匹配到下一个斜杠之前的内容,只需要将路由参数改为通配符匹配模式,就可以捕获/api/photo/之后包含斜杠的所有路径内容。
将原有路由代码:

app.get('/api/photo/:S3ObjectKey', photo.get);

替换为:

app.get('/api/photo/:S3ObjectKey(*)', photo.get);

第二步:直接复用原有逻辑

修改路由后不需要调整photo.get内的处理代码,req.params.S3ObjectKey会直接返回完整的路径值,示例请求中就能拿到bucketMyPhoto/2020/07/12/home/table.jpeg。


安全优化建议

由于现在会接收任意路径作为参数,建议新增路径校验规则,防止恶意用户构造../../../sensitive/file这类相对路径遍历S3桶内非公开文件:

const S3ObjectKey = req.params.S3ObjectKey;
// 新增相对路径拦截逻辑
if (S3ObjectKey.includes('..')) {
  return res.status(400).send('Invalid file path');
}
// 原有后续逻辑保持不变
if (!S3ObjectKey) {
  console.log("No S3ObjectKey specified");
  return res.status(400).send("Missing S3 object key");
}
console.log("S3ObjectKey: ", S3ObjectKey);

const canShow = true;
if (canShow) {
  const bucket_name = process.env.AWS_S3_BUCKET_NAME;
  const data = await S3.getFile(bucket_name, S3ObjectKey);
  data.Body.pipe(res);
}

内容的提问来源于stack exchange,提问作者Kid_Learning_C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:54:04