【发布时间】:2016-12-02 17:32:06
【问题描述】:
从前端并通过 jQuery,我正在向 node/express 应用程序发出 GET 请求。然后,此应用程序与 spotify API 对话以对用户进行身份验证。当我尝试调用 presave 端点时收到以下错误消息。
:8000/#access_token=AccessTokenProvidedBySpotify XMLHttpRequest 无法加载 http://XXX.XX.XXX.XXX/presave。对预检的响应 请求未通过访问控制检查:否 'Access-Control-Allow-Origin' 标头出现在请求的 资源。因此不允许使用原点“http://XXX.XX.XXX.XXX:8000” 访问。
我尝试将以下代码添加到我的app.js express 应用程序中,但没有成功。我也尝试了所有可以在网上找到的其他方法,但无法正常工作。
var app = express();
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.get('/presave', function(req, res){
var options = {
url: 'https://api.spotify.com/v1/me',
headers: {
'Authorization': 'Bearer ' + access_token
},
json: true
};
requestPromise(options).then(function(body) {
userEmail = body.email;
userId = body.id;
var optionsTwo = {
url: 'https://api.spotify.com/v1/users/' + userId + '/playlists',
headers: {
'Authorization': 'Bearer ' + access_token
},
json: true
};
return rp(optionsTwo).then(function (body) {
playlists = body.items;
res.json(playlists);
});
}).catch(function (err) {
console.log(err)
})
});
编辑
我也实现了下面提供的答案,但这也不起作用。如果我console.log(req.method) 总是GET,它永远不会显示OPTIONS。
var app = express();
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
if (req.method === 'OPTIONS') {
return res.send(200);
} else {
return next();
}
});
我的前端代码如下:
$.ajax({
type: 'GET',
url: 'http://xxx.xx.xxx.xxx/presave',
contentType: 'application/json',
success: function(data) {
console.log(data)
}
});
【问题讨论】:
-
这一行有一个小错字:
app.get('/presave', function(req, res){]。末尾有多余的]。 -
@SphDev 抱歉,错字,我的代码中不是这样的
-
您没有响应预检请求,如错误所示。
-
@KevinB 好的,关于如何消除此错误的任何指导?
标签: javascript jquery node.js express spotify