如何解决Angular中的CORS政策问题(MEAN.IO

时间:2019-04-04 07:41:51

标签: node.js angular express cors mean-stack

我正在使用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进行此操作时,效果很好。

2 个答案:

答案 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)。