我已经看到了几个问题和答案,我的工作已经完成了一半。
我有一个带有url api.domain.com的node.js api服务器和一个位于www.domain.com的nginx服务器上的网站,当我在api服务器上执行以下请求时,我看到了请求我看到它被解析并放入数据库。但是,在客户端我没有立即返回,最后我会看到No 'Access-Control-Allow-Origin' header is present on the requested resource.
我知道导致此行为的原因是什么,但它不应该在它到达API服务器之前抛出错误?另请注意,node.js服务器已启用cors。应该回来的回应是json。
$http({
method: 'POST',
url: "http://api.domain.com/addtrans/" + $scope.accountID,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT',
'Content-Type': 'application/x-www-form-urlencoded'
},
transformRequest: function (obj) {
var str = [];
for (var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
},
data: {
payload: JSON.stringify(trans)
}
}).success(function (result) {
$scope.trans = {};
console.log(result);
});
答案 0 :(得分:0)
我在所有项目中都使用了以下中间件,并且它已被证明效果最佳。
const allowCors = (req, res, next) => {
/** Allow all origins, for now TODO */
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Headers', 'Authorization, Content-Type');
res.header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE');
/** Browser check for pre-flight request to determine whether the server is webdav compatible */
if ('OPTIONS' == req.method) {
res.sendStatus(204);
}
else next();
};
// Put this code before the routes you want to allow CORS to
app.use(allowCors);
出于安全原因,您应该将Allow-Origin更改为更受限制的内容。
以上代码涵盖CORS以及大多数浏览器的预飞行(这是我们在开始时遇到的主要问题)。
答案 1 :(得分:0)
我刚才用过(表达3.x):
// npm install --save cors
var express = require('express');
var cors = require('cors');
var app = express();
app.use(cors());
app.use(express.static());
app.get('*', function(){});
require('http').createServer(app).listen(3000)
答案 2 :(得分:0)
请记住,cors标题应该是来自服务器的响应,而不是来自客户端的请求。
您可以使用中间件在服务器上启用cors:
Label4 = canvas.create_text(300, 460, text=itemThree, font=('Impact', -30), fill="yellow")