阿拉伯语URL路由使用快速Web框架?

时间:2017-05-13 17:38:40

标签: node.js express

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

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

2 个答案:

答案 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');
});