Node.js 角度:无';访问控制允许原点';请求的资源上存在标头
我可以通过一些本地临时修复来传递这个错误。但现在,我正在将应用程序移动到web。花了两天时间试图找出这个CORS错误。在我的VDS上,我有x.x.x.x:4200和x.x.x.x:3000作为角度和nodejs/express设置。两者都可以在互联网上访问 我所尝试的:Node.js 角度:无';访问控制允许原点';请求的资源上存在标头,node.js,angular,express,deployment,cors,Node.js,Angular,Express,Deployment,Cors,我可以通过一些本地临时修复来传递这个错误。但现在,我正在将应用程序移动到web。花了两天时间试图找出这个CORS错误。在我的VDS上,我有x.x.x.x:4200和x.x.x.x:3000作为角度和nodejs/express设置。两者都可以在互联网上访问 我所尝试的: 在客户端和服务器上设置与CORS相关的头 设置app.use(cors()) 也许我的尝试是错误的,所以你可以提出一些澄清相同的方法 在客户端获取请求: apiUrl = 'http://46.245.165.120:30
- 在客户端和服务器上设置与CORS相关的头
- 设置
app.use(cors())代码>
apiUrl = 'http://46.245.165.120:3000/';
this.http.get(this.apiUrl + `users/${type}`, { headers: { 'Authorization': `Bearer ${this.getToken()}` ,
'Access-Control-Allow-Origin':'*',
'Access-Control-Allow-Methods': 'GET, POST, PATCH, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token'
}});
服务器端头和CORS设置:
var originsWhitelist = [
'http://localhost:4200', //this is my front-end url for development
'http://x.x.x.x:4200',
'http://www.myproductionurl.com'
];
var corsOptions = {
origin: function (origin, callback) {
var isWhitelisted = originsWhitelist.indexOf(origin) !== -1;
callback(null, isWhitelisted);
},
credentials: true
};
app.use(cors(corsOptions));
const allowCrossDomain = function (req, res, next) {
var origin = req.headers.origin;
if (originsWhitelist.indexOf(origin) > -1) {
res.header('Access-Control-Allow-Origin', origin);
}
res.header('Access-Control-Allow-Methods', 'OPTIONS, GET, POST'); // added OPTIONS as an allowed method
res.header('Access-Control-Allow-Headers', 'X-Requested-With,content-type,x-access-token');
res.header('access-control-allow-credentials', true);
return next();
}
app.use(allowCrossDomain)
您只需在后端(node/express)使用此代码即可:
var express=require('express'))
var cors=require('cors')
var app=express()
应用程序使用(cors)({
来源:[
'http://localhost:4200“,//这是我用于开发的前端url
'http://x.x.x.x:4200',
'http://www.myproductionurl.com'
]
}))
app.get(“/MyAPI端点”,函数(req,res,next){
res.json({消息:“此API端点已启用CORS”。})
})
应用程序侦听(3000,函数(){
console.log('在端口3000上侦听的启用CORS的web服务器')
})
在您的前端(角度):
this.http.get(`${this.apirl}/users/${type}`,{
标题:{
'Authorization':'Bearer${this.getToken()}`
}
);
关于
节点
和express的更多详细信息我从向rest api发出请求,请求能够返回200个响应,因此我意识到问题出在我的角度应用程序上。我所有的问题都是本地主机的APIRL。我向本地主机:3000
发出请求,而不是x.x.x:3000
。有点疏忽,但浪费了大量时间,所以我想回答自己的问题。请以文本而不是图像的形式向我们展示相关的服务器代码。@jfriend00在那里它是访问控制允许-*在HTTP请求中不应该是必需的。你能接受res.header('Access-Control-Allow-Origin','*');
或者让Origin按阶段配置吗(dev vs.prod)并明确设置一个原点?@DavidRenner我不明白。我甚至无法生活这就是问题所在我意识到问题完全不同。