首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用express处理路由器中一行中的两个斜线?

如何使用express处理路由器中一行中的两个斜线?
EN

Stack Overflow用户
提问于 2020-02-03 00:41:02
回答 2查看 1.6K关注 0票数 0

问题

嗨,亲爱的,

我在传递一张开头有“/”的身份证时遇到了麻烦。

这是日志

代码语言:javascript
复制
GET /api/v1/ GetAnimeInfo//anime/5226/tokyo-ghoul/Tokyo% 20Ghoul 404 0.466 ms - 1310

如你所见,他在GetAnimeInfo//之后不认识两个GetAnimeInfo//

难道高速公路不允许我这样做吗?

代码语言:javascript
复制
//id = '/anime/5226/tokyo-ghoul/'
//title = 'Tokyo Ghoul'

router.get('/GetAnimeInfo/:id([^/]+/[^/]+[^/]+/[^/])/:title' , (req , res , next) =>{
  let id = req.params.id
  let title = req.query.title;
  api.getAnimeInfo(id , title)
    .then(info =>{
      res.status(200).json({
        info
      });
    }).catch((err) =>{
      console.log(err);
    });
});
EN

回答 2

Stack Overflow用户

发布于 2020-02-03 01:09:05

我强烈建议不要这样做。

如果客户端发送了一个错误的双斜杠,就会有一个功能错误创建了这个问题,您应该修复这个错误,而不是在服务器上提供一个奇怪的解决方案--这样您将来就会得到更健壮、更可预测和更可维护的代码。

如果您试图操作服务器以接受双斜杠作为路由的一部分,则无法保证客户端将尊重此行为,因此您将遇到这样的情况:一个浏览器将工作,而另一个浏览器将不工作。

如果有以斜杠开头的节目,如“/ShowName”,需要说明,则应该使用URL编码- https://en.wikipedia.org/wiki/Percent-encoding转义节目名。

票数 1
EN

Stack Overflow用户

发布于 2020-02-03 00:56:31

是的,这不太可能奏效,因为快递不知道:id在哪里结束,其馀的URL模式匹配从哪里开始。

你就不能手动解析URL吗?看起来并不是那么困难。

代码语言:javascript
复制
router.get('/GetAnimeInfo/:idAndTitle', (req, res, next) => {
  const { idAndTitle } = req.params;
  const idx = idAndTitle.lastIndexOf("/") + 1;
  const id = idAndTitle.substring(0, idx);
  const title = idAndTitle.substring(idx, idAndTitle.length);
  ...
});

Demo

代码语言:javascript
复制
const idAndTitle = '/anime/5226/tokyo-ghoul/Tokyo Ghoul';
const idx = idAndTitle.lastIndexOf("/") + 1;
const id = idAndTitle.substring(0, idx);
const title = idAndTitle.substring(idx, idAndTitle.length);
console.log(`ID=${id}`);
console.log(`Title=${title}`);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60031930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档