我正在创建一个Express路由,该路由调用GitHub API并添加一个?callback=foo
模式,以便它返回链接头,我需要解析{{ 1}}标头,因为它包含我必须调用以获取响应的下一页的链接。
问题是响应具有预期的模式,但是当我尝试创建一个函数来梳理函数的Link:
和meta
部分时,它们会显示为未定义。
我的代码:
data
注1 :响应如下:
app.get('/populate', function(req, res, next) {
console.log('/populate route hit');
var token = "<something>";
var options = {
url: 'https://api.github.com/users?callback=resp',
headers: {
'User-Agent': 'Our-App',
'Authorization': 'token '+ token
}
};
api(options) // 'api' is request-promise module, makes http requests
.then(function(response) {
console.log(response); // Note 1
function resp(res) {
var meta = res.meta;
var data = res.data;
console.log('meta ', meta); // Note 2
console.log('data ', data);
}
resp(response);
响应看起来像是JSON.stringified但是当我 /**/resp({"meta":{"X-RateLimit-Limit":"5000","X-RateLimit-Remaining":"4993",
"X-RateLimit-Reset":"1435297775","X-OAuth-Scopes":"public_repo, user:email",
"X-Accepted-OAuth-Scopes":"repo","Cache-Control":"private, max-age=60, s-maxage=60",
"Vary":"Accept, Authorization, Cookie, X-GitHub-OTP",
"ETag":"\"0cbbd180648a54f839a237b0302025db\"",
"X-GitHub-Media-Type":"github.v3; format=json",
"Link":[["https://api.github.com/users?callback=resp&since=46",
{"rel":"next"}],["https://api.github.com/users{?since}",
{"rel":"first"}]],"status":200},"data":[{"login":"mojombo","id":1,
...etc etc...
}]})
时它返回错误。我不知道如何访问深度嵌入的JSON.parse(response)
标头,甚至是Link:
,它们看起来也像JSON。
注意2 res.meta和res.data日志为 undefined 。
答案 0 :(得分:1)
答案不是JSON,而是lookup( )。 JSONP是一种用于检索数据的跨域机制。您不使用XHR(例如script
)来请求JSONP,而是使用script
标记。 (因为XHR受JSONP限制; ?callback=resp
标记不是。)
如果您通过XHR检索该数据的呼叫有效,则表示您的情况允许跨域XHR呼叫(服务器支持Same Origin Policy您的页面来源,浏览器支持CORS)。您可以通过删除网址中的{{1}}来获取JSON而不是JSONP。