【发布时间】:2021-12-19 09:16:35
【问题描述】:
我在从 localhost 调用远程 API 时遇到问题。
我正在使用nimble:restivus 包
https://github.com/kahmali/meteor-restivus
根据我正在设置的文档:
enableCors: true
为了允许从任何来源访问。但没有运气。
这是我在浏览器控制台中遇到的错误:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading
the remote resource at http://192.168.18.20:9000/api/getUsers.
(Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
这是我的服务器端代码:
myApi = new Restivus({
apiPath: 'api/',
enableCors: true,
useDefaultAuth: false,
prettyJson: true,
defaultOptionsEndpoint: {
action: function() {
this.response.writeHead(201, {
"Access-Control-Allow-Origin", "*",
"Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Z-Key, Authorization"
"Content-Type": "application/json",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS"
});
this.done();
return {
status: "success",
"data": {
"message": "We love OPTIONS"
}
};
}
}
});
这是我的客户端代码:
$.ajax
({
type: "POST",
url: "https://example.com/api/getUsers",
dataType: 'json',
headers: {
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI"
}
data: {},
success: function (){
alert('Thanks for your comment!');
}
});
如果我在标头中不发送任何内容,则请求成功,否则会在浏览器控制台中出错。
谁能帮我解决这个问题?
【问题讨论】:
-
您的框架一定是配置错误,不知何故。不幸的是,我不熟悉 Restivus。您有机会在 Chrome 中进行测试吗?它也会在那里失败,但在我看来,Chrome 的 CORS 错误消息比 Firefox 提供的信息更多。
-
应该
"Access-Control-Allow-Origin", "*"不是"Access-Control-Allow-Origin": "*"(冒号而不是逗号)? -
关于
"Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Z-Key, Authorization"的相同评论。
标签: node.js api rest meteor cors