我正在使用MEAN堆栈(NodeJS,Express,Angular 6,MongoDB)。 有简单的函数可以从外部API获取数据,但是每当发送请求时,我都会收到错误消息:
let api = 'https://thongtindoanhnghiep.co/api/city';
return this.http.get<any>(api).subscribe( res =>{
this.data = res;
});
“选项https://thongtindoanhnghiep.co/api/city 405(不允许使用方法) 从源'https://thongtindoanhnghiep.co/api/city'处对'http://localhost:4040'处XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:它没有HTTP正常状态。” >
我的Chrome禁用了网络安全性,已安装CORS扩展,并且我的应用已在服务器端配置并启用了cors。 当我使用Postman进行此操作时,效果很好。
答案 0 :(得分:-2)
您可以在Node.js应用程序入口点使用它
var cors = require('cors')
app.use(cors())
或
您可以使用响应对象来设置标题
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
希望这可以解决问题。
答案 1 :(得分:-2)
在节点js中,您已用2种类型修复了此问题
类型1
安装 cors
npm install cors
var express = require('express')
var cors = require('cors')
var app = express()
app.use(cors())
// cors config
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT,DELETE");
res.header("Access-Control-Allow-Headers", "*");
next();
});
app.listen(8083, () => {
console.log('Server connected with 8083');
})
类型2
npm install browser-sync --save
var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey = fs.readFileSync('node_modules/browser-sync/certs/server.key', 'utf8');
var certificate = fs.readFileSync('node_modules/browser-sync/certs/server.crt', 'utf8');
var credentials = {key: privateKey, cert: certificate};
var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);
httpServer.listen(8080,()=>{
console.log('Server connected with 8080');
});
httpsServer.listen(8081,()=>{
console.log('Server connected with 8081');
});
通过这种方式,您可以向本地http / https服务器提供快速中间件
如果您希望您的应用程序在1024以下的端口上运行,则需要使用sudo命令(不推荐)或使用反向代理(例如nginx,haproxy)。