相对URI为node.js请求库

我有以下代码,node.js无法parsingurl:

var teamURL = '/users/' + user._id + '/teams'; var req = request({ url: teamURL, json: true }, function(error, response, body) { if (!error && response.statusCode == '200') { //var teams = JSON.stringify(body); var teams = body; res.render('userHome.html', { user: user, teams: teams }); } else { console.error(error); next(error); } }); 

是否有一个好的方法来使用服务器端node.js Express应用程序的请求库的相对path/url?

只给出一个相对的url只有在从上下文清楚地知道url的根部分应该是什么的情况下才起作用。 例如,如果你是在stackoverflow.com并find一个链接/questions ,从上下文清楚,完整的url应该是stackoverflow.com/questions

请求库没有这种可用的上下文信息,所以它需要你的完整url来做请求。 你当然可以自己构build完整的url,例如使用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'); 

但是,当然这仍然需要你知道url的根部分。

贾斯珀的答案是正确的 – 请求模块需要完整的URL。 如果您处于单页面应用程序的情况,并且对具有相同基本URL的API提出了大量请求,则可以通过创build如下模块来节省大量input:

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

然后,随时获取基本URL: requestParser.uriMinusPath

并获取任意查询参数的值: RequestParser.getQueryStringValue('partner_key');