我在使用阿拉伯语网址路由呈现页面时遇到问题:
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
答案 0 :(得分:2)
您可以使用请求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');
});
答案 1 :(得分:2)
您有两种选择:
a)编写一个中间件(在路由之前执行),对URL中的UTF8字符进行URL解码并更新req.url 优点:您编写的任何后续中间件都可以引用原始的UTF-8字符
原油示例:
app.use(function(req, res, next) {
req.url = decodeURI(req.url);
next();
});
[OR]
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');
});