2017-03-24 4 views
1

In meiner ausdrücklichen App habe ich einen Router api/shorten/ hören:Wie übergibt man eine URL als "URL-Parameter" in Express?

router.get('api/shorten/:longUrl', function(req, res, next) { 
     console.log(req.params.longUrl); 
    } 

Wenn ich so etwas wie verwenden:

http://localhost:3000/api/shorten/www.udemy.com 

ich www.udemy.com bekommen das ist, was ich erwarte.

Aber wenn ich benutze:

http://localhost:3000/api/shorten/http://www.udemy.com 

Ich erhalte einen 404 Fehler.

Ich möchte http://www.udemy.com bekommen, wenn ich auf req.params.parameter zugreifen.

+0

Sie müssen URL als Text oder zumindest im Abfrageparameter übergeben und nicht an die ursprüngliche URL selbst anhängen. Der Fehler, den Sie erhalten, ist, weil der Browser es ausfiltert – binariedMe

+0

Sie müssen die URL verschlüsseln, die Sie anhängen, da Zeichen wie ':' nirgendwo außer im Protokoll erlaubt sind, also im Pfad der URL nicht verwendet werden können. – jfriend00

+1

@ binariedMe - Das ist nicht wahr. Es kann im Pfad sein, wenn es richtig codiert ist. – jfriend00

Antwort

5

Ich bin mir nicht sicher, ob Sie noch suchen eine Lösung für dieses Problem. Vielleicht nur für den Fall jemand anderes die gleiche Sache, um herauszufinden versucht, ist dies eine einfache Lösung für Ihr Problem:

app.get('/new/*', function(req, res) { 

    // Grab params that are attached on the end of the /new/ route 
    var url = req.params[0]; 

Auf diese Weise müssen Sie den zukunfts schwitzen nicht über schlitzt verwechselt für Routen oder Verzeichnisse , es wird alles nach/neu/greifen.

+0

Danke @Allan. Ich habe diese Lösung bereits gefunden, aber Ihre Antwort wird für andere hilfreich sein, die das gleiche Problem haben. Ich werde es akzeptieren, da es die Antwort war, mit der ich mein Problem gelöst habe. –

0

Sie müssen sich als so entkommen:

escape("http://www.google.com") 

Welche zurück:

"http%3A//www.google.com" 
+0

danke für deine Antwort, aber ich möchte es lösen, ohne es zu verschlüsseln, ich möchte es so weitergeben wie es ist und das auf der Serverseite behandeln. –

+0

In Ordnung ändern Sie Ihre Route zu "api/kürzen /: longUrl *" –

0

Sie müssen encodeURIComponent im Client verwenden, und decodeURIComponent im Express-Server, wird dies alles kodieren die nicht erlaubt Zeichen aus dem URL-Parameter wie : und /

+0

Ich entwerfe eine API, so habe ich keine Kontrolle über die Client-Seite .. Ich kann es nicht in den Client verschlüsseln, ich muss damit umgehen Server nur –

Verwandte Themen