我正在尝试使用这条路线 http://localhost:3030/api/words/عشق 在我的快速应用程序中,所以我可以匹配字典中的单词。
浏览器将 url 更改为 http://localhost:3030/api/words/%D8%B9%D8%B4%D9%82 但我编写了一个小中间件,在将其传递给路由之前将其转换回原始版本。在路由中,我有一个正则表达式,用于检查包含波斯语/波斯语字符的 unicode 字符。
不确定发生了什么,因为中间件打印/words/عشق
,如果我删除正则表达式规则,路由也会打印/words/عشق
.为什么快递不匹配?快递不使用 req.url 来确定路线吗?
/** Get word be string **/
api.get('/:word(^([\u0600-\u06FF]+\s?)+$)', (req, res, next) =>{
console.log("persian version " + req.url);
res.send(req.params);
});
/** Url encoder middleware **/
function urlencoder(req, res, next) {
req.url = decodeURIComponent(req.url);
console.log("Middleware " + req.url);
next();
}
我认为将路由路径转换为正则表达式的代码已经在正则表达式中加上了锚点(^
),所以你不应该在你的中使用额外的一个。
这似乎有效:
let unescape = require('querystring').unescape;
api.use((req, res, next) => {
req.url = unescape(req.url);
next();
});
api.get('/:word(([\u0600-\u06FF]+\s?)+$)', (req, res) => {
console.log("persian version " + req.url);
res.send(req.params);
});