2013-08-28 6 views
40

Sto usando express.js e ho bisogno di sapere il dominio che sta originando la chiamata. Questo è il semplice codiceCome si ottiene il dominio che genera la richiesta in express.js?

app.get(
    '/verify_license_key.json', 
    function(req, res) { 
     // do something 

Come faccio ad avere il dominio dal req o l'oggetto res? Voglio dire, ho bisogno di sapere se l'API è stata chiamata da somesite.com o someothersite.com. Ho provato a fare una console.dir di entrambi req e res ma non ho avuto idea da lì, ho letto anche la documentazione ma non mi ha dato alcun aiuto.

+1

prova: 'req.host' o' req.get ('host') '[esprime docs] (http: //expressjs.com/api.html#req.host) – dc5

+0

node.js: 'req.headers [" x-forwarded-for "] || req.connection.remoteAddress' [x-forwarded-for] (http://en.wikipedia.org/wiki/X-Forwarded-For) coprirebbe le basi dietro un proxy, bilanciamento del carico ... –

+0

Ricevo questo avviso : express deprecated req.host: usa req.hostname invece index.js: 20: 8 –

risposta

65

È necessario recuperarlo dallo HOST header.

var host = req.get('host'); 

È facoltativo con HTTP 1.0, ma richiesto da 1.1. E l'app può sempre imporre un suo requisito.


Se questo è per sostenere cross-origin requests, si dovrebbe invece utilizzare l'intestazione Origin.

var origin = req.get('origin'); 

Si noti che alcune richieste cross-origine richiedono la convalida attraverso una "preflight" request:

req.options('/route', function (req, res) { 
    var origin = req.get('origin'); 
    // ... 
}); 

Se siete alla ricerca di IP del client, è possibile recuperare quello con:

var userIP = req.socket.remoteAddress; 

Si noti che, se il server è dietro un proxy, questo probabilmente vi darà IP del proxy. Se è possibile ottenere l'IP dell'utente dipende da quali informazioni passa il proxy. Ma, tipicamente, sarà anche nelle intestazioni.

+0

Ma questo non mi dà l'host delle API? Potrebbe essere causato dal fatto che sto facendo questo localmente e ho api.time.ly impostato per risolvere in 127.0.0.1 e la chiamata che sto facendo è da localhost, ma se lo uso, host è "api.time.ly" ho bisogno di sapere il dominio che mi sta chiamando. lo testerò su un sito live. –

+0

@NicolaPeluchetti Immagino di non capire cosa intendi per "* il dominio che mi sta chiamando *." I client HTTP non forniscono in genere il proprio nome host nella richiesta. È questo per [CORS] (http://en.wikipedia.org/wiki/Cross-origin_resource_sharing)? –

+0

Ho una API centrale che si trova in api.time.ly. Questa API è chiamata da diversi siti Web dei clienti che installano il nostro plugin wordpress.Quindi potremmo avere http://church1.com e http://sauna1.com effettuare chiamate alla nostra API. Nell'API sarei in grado di ottenere se la chiamata è stata effettuata da http://church1.com o da http://sauna1.com? ho visto un header "user-agent": "WordPress/3.6; http: // localhost/wordpress_clean'' dovrei analizzarlo? –

5

Invece di:

var host = req.get('host'); 
var origin = req.get('origin'); 

è anche possibile utilizzare:

var host = req.headers.host; 
var origin = req.headers.origin; 
Problemi correlati