2015-03-13 16 views
8

Ho il seguente codice e node.js non può risolvere l'url:uri relativa per la richiesta node.js biblioteca

const request = require('request') 
const teamURL = `/users/${user._id}/teams`; 

const req = request({ 
    url: teamURL, 
    json: true 
}, 
function(error, response, body) { 

    if (!error && response.statusCode == '200') { 

     res.render('userHome.html', { 
      user: user, 
      teams: body 
     }); 
    } 
    else { 
     console.error(error); 
     next(error); 
    } 
}); 

c'è un buon modo per utilizzare percorsi relativi/URL con la libreria richiesta su un'app di node.js Express lato server?

+1

si prega di spiegare che cosa si intende per "node.js non può risolvere l'url". Se potessi pubblicare un messaggio di errore con uno stacktrace, sarebbe utile. –

risposta

5

L'invio di un solo url relativo funziona solo se è chiaro dal contesto quale deve essere la parte radice dell'URL. Ad esempio, se si è su stackoverflow.com e si trova un collegamento /questions, è chiaro dal contesto che l'url completo deve essere stackoverflow.com/questions.

La libreria di richieste non dispone di questo tipo di informazioni di contesto disponibili, quindi è necessario che l'URL completo sia in grado di effettuare la richiesta. È possibile costruire l'URL completo da soli, naturalmente, ad esempio utilizzando url.resolve():

var url = require('url'); 
var fullUrl = url.resolve('http://somesite.com', '/users/15/teams'); 
console.log(fullUrl); //=> 'http://somesite.com/users/15/teams'); 

Ma naturalmente questo sarà ancora richiedono di conoscere la parte principale del l'url.

2

La risposta di Jasper è corretta: il modulo di richiesta richiede un URL completo. se si è in una situazione in cui si dispone di una singola applicazione pagina, con un sacco di richieste di un API con lo stesso URL di base, è possibile risparmiare un sacco di battitura con la creazione di un modulo come questo:

var url = require('url'); 

    var requestParser = (function() { 
     var href = document.location.href; 
     var urlObj = url.parse(href, true); 

     return { 
     href, 
     urlObj, 
     getQueryStringValue: (key) => { 
      let value = ((urlObj && urlObj.query) && urlObj.query[key]) || null; 
      return value; 
     }, 
     uriMinusPath: urlObj.protocol + '//' + urlObj.hostname            
     }; 
    })(); 

poi, per afferrare l'URL di base in qualsiasi momento ne avete bisogno: requestParser.uriMinusPath

e afferrare il valore di un parametro di query arbitraria: RequestParser.getQueryStringValue('partner_key');

Problemi correlati