我在快速使用阿拉伯语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');
});