2017-05-13 2 views
0

Ich habe ein Problem bekommt express eine Seite mit einer arabischen url Route zu machen:Arabische URL-Route mit Express-Web-Framework?

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

, wenn ich Zugriff versuchen, dies über den Browser localhost:5000/شقق-في-لندن erhalte ich einen Fehler nicht gefunden sagen.

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

Antwort

1

könnten Sie Anfrage verwenden params und überprüfen Sie die URL wie die folgenden

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

ich ein Problem mit meiner aktuellen Implementierung gefunden, und ich empfehle den Weg @Vasan weil in meiner impementation der Reihenfolge der Routen verursachen einen Fehler, unerwartetes Verhalten und Redundanz. Hier

ist die richtige Lösung

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

Sie haben zwei Möglichkeiten:

a) Schreiben Sie eine Middleware (Ausführung vor Routing), die URL-dekodiert die UTF8-Zeichen in URL und Updates req.url Vorteil: Alle Sie nachfolgende Middleware schreiben kann auf die ursprüngliche beziehen UTF-8-Zeichen

Crude Beispiel:

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

[OR]

b) Veränderung Strecke (n), wie die URL-codierten Versionen übereinstimmen so

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

oder eleganter:

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