2012-04-01 19 views
7
url=require('url'); 

qs=require('querystring'); 

var http=require('http'); 

http.createServer(server).listen(1337, 'hostname'); 

function server(req, res) { 

    res.writeHead(200, {'Content-Type': 'text/plain'}); 

    res.write(req.url); 

    a=url.parse(req.url, true); 

    console.log(a); 

    res.end('\nHello World\n'); 

} 

console.log('Server running at http://127.0.0.1:1337/'); 




//http://host:1337/#A=1111111 <--- not coming in log or url 
//http://host:1337/?A=11111111 <--- works ok 

//usecase : facebook access_token url format is something similar to above 
+1

Wenn Sie eine URL wie diese http: // host: 1337/# A = 1111111 anfordern, wird diese nur an den Server http: // host: 1337/gesendet und dieses Fragment an den Browser # A = 1111111 Facebook holt diese URL lokal im Browser, analysiert sie und wandelt sie in eine Get-Variable wie diese http: // host: 1337 /? A = 11111111 Dann Anforderungen für die Daten mit AJAX, analysiert alle Daten und schreibt sie in die Browser. Dies ist eine alte Technik, die das 'onhashchange'-Ereignis erfordert. Dies ist der beste Weg, dies zu erreichen, indem Sie pushState implementieren und die gesamte URL ändern, ohne die Seite zu aktualisieren. – neojp

Antwort

19

Der Teil der URL nach der '#' Marke, die fragment genannt, wird nicht an den Server gesendet. Wenn Sie Daten im Fragment speichern, müssen Sie diese Daten verarbeiten und eine Ajax-Anforderung mit den Daten in einem GET-Argument ausführen.

+2

Facebook ruft mit diesem Format zu dev-Server mit http: // Servername zurück: Port/Pfad # access_token = somestring –

+0

Ich wünschte wirklich, sie haben diese Frage nicht geschlossen. Dieses Facebook-Fragment ist wirklich nervig. – Gavin