我正在创建一个快速路由,它使用一个添加到端点的GitHub模式调用?callback=foo
API,这样它将返回我需要解析的Link:
头,因为它包含了我必须调用的链接,以获得响应的下一页。
问题是响应具有预期的模式,但是当我试图创建一个函数来梳理函数的meta
和data
部分时,它们会出现未定义的情况。
我的代码:
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);
注意事项1:响应如下:
/**/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.stringified,但是当我JSON.parse(response)
时,它返回一个错误。我不知道如何访问嵌入得很深的Link:
头,甚至data
,它看起来也像JSON。
注释2 res.meta和res.data日志为未定义。
发布于 2015-06-26 05:31:46
响应不是JSON,而是http://en.wikipedia.org/wiki/JSONP#JSONP。JSONP是一种跨域的数据检索机制.您不使用XHR (例如,app.get
)请求JSONP,而是使用script
标记。(因为XHR受到同一原产地政策的限制;script
标记则不受限制。)
如果通过XHR检索数据的调用有效,则意味着在您的情况下允许跨域XHR调用(服务器支持具有页面来源的跨源资源共享,浏览器支持CORS)。您可以通过删除URL中的?callback=resp
来获得JSON而不是JSONP。
https://stackoverflow.com/questions/31065558
复制相似问题