问题
嗨,亲爱的,
我在传递一张开头有“/”的身份证时遇到了麻烦。
这是日志
GET /api/v1/ GetAnimeInfo//anime/5226/tokyo-ghoul/Tokyo% 20Ghoul 404 0.466 ms - 1310如你所见,他在GetAnimeInfo//之后不认识两个GetAnimeInfo//
难道高速公路不允许我这样做吗?
//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);
});
});发布于 2020-02-03 01:09:05
我强烈建议不要这样做。
如果客户端发送了一个错误的双斜杠,就会有一个功能错误创建了这个问题,您应该修复这个错误,而不是在服务器上提供一个奇怪的解决方案--这样您将来就会得到更健壮、更可预测和更可维护的代码。
如果您试图操作服务器以接受双斜杠作为路由的一部分,则无法保证客户端将尊重此行为,因此您将遇到这样的情况:一个浏览器将工作,而另一个浏览器将不工作。
如果有以斜杠开头的节目,如“/ShowName”,需要说明,则应该使用URL编码- https://en.wikipedia.org/wiki/Percent-encoding转义节目名。
发布于 2020-02-03 00:56:31
是的,这不太可能奏效,因为快递不知道:id在哪里结束,其馀的URL模式匹配从哪里开始。
你就不能手动解析URL吗?看起来并不是那么困难。
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
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}`);
https://stackoverflow.com/questions/60031930
复制相似问题