使用快速网络框架的阿拉伯语URL路由?



我在快速使用阿拉伯语URL路由呈现页面时遇到问题:

app.get('/شقق-في-لندن', function(req, res){
res.render('apartments');
});

当我尝试使用浏览器访问它时localhost:5000/شقق-في-لندن我收到一个错误说找不到。

Cannot GET /%D8%B4%D9%82%D9%82-%D9%81%D9%8A-%D9%84%D9%86%D8%AF%D9%86

您有两个选择:

a) 编写一个中间件(在路由之前执行),对 URL 中的 UTF8 字符进行 URL 解码并更新 req.url 优点:您编写的任何后续中间件都可以引用原始 UTF-8 字符

粗略的例子:

app.use(function(req, res, next) {
req.url = decodeURI(req.url);
next();
});

[或]

b) 更改路由以匹配 URL 编码的版本,如下所示

app.get('/%D8%B4%D9%82%D9%82-%D9%81%D9%8A-%D9%84%D9%86%D8%AF%D9%86', function(req, res){
res.render('apartments');
});

或更优雅:

app.get('/'+encodeURIComponent('شقق-في-لندن'), function(req, res){
res.render('apartments');
});

您可以使用请求params并检查网址,如下所示

app.get('/:arabic_url', function(req, res , next ){
if(req.params.arabic_url !== 'شقق-في-لندن') {
return next();
}
res.render('apartments');
});

我发现我当前的实现存在问题,我推荐@Vasan的方式,因为在我的影响中,您的路由顺序会导致错误、意外行为和冗余。

这是正确的解决方案

app.get('/' + encodeURIComponent('شقق-في-لندن') , function(req, res){
res.render('apartments');
});

最新更新