【发布时间】:2016-11-26 03:05:24
【问题描述】:
我正在尝试使用这条路线http://localhost:3030/api/words/عشق 在我的快递应用程序中,所以我可以匹配字典中的单词。
浏览器将 url 更改为 http://localhost:3030/api/words/%D8%B9%D8%B4%D9%82,但我编写了一个小型中间件,在将其传递给路由之前将其转换回原始版本。在路线中,我有正则表达式来检查包含波斯语/波斯语字符的 unicode 字符。
不确定发生了什么,因为中间件打印/words/عشق,如果我删除正则表达式规则,路由也会打印/words/عشق。为什么快递不匹配这个? express 不使用 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();
}
【问题讨论】:
-
我认为它不使用它。这样重写也感觉不对。为什么不在你的
api.get函数中解码它,然后再查找它? -
因为如果没有预解码,我无法使用正则表达式匹配 url。
-
它实际上应该可以修改 req.url - 根据我对 Express 路由器实际所做的阅读。 api的定义是什么,中间件堆栈中的api和urlencoder在哪里?
-
是的,使用中间件调整 req.url 的值确实有效——中间件链中该点之后的所有路由都是基于修改后的 URL 进行路由。
-
我在 cors 中间件之后和正文解析器之前添加中间件。甚至关闭了其他中间件,但似乎不起作用。 api 是一个快速路由器,用于将路由分组到不同的类中。
标签: javascript node.js express non-ascii-characters unicode-string