Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何在MEAN STACK web app中启用CORS?_Angularjs_Node.js_Mean Stack - Fatal编程技术网

Angularjs 如何在MEAN STACK web app中启用CORS?

Angularjs 如何在MEAN STACK web app中启用CORS?,angularjs,node.js,mean-stack,Angularjs,Node.js,Mean Stack,我正在开发一个MEAN-STACK应用程序。使用node的MEAN-cli包。 其中我使用的是黑暗天气API, 在包名称信息中。我有4个其他包在自定义文件夹的平均应用程序。 我如何启用CORS,以便所有API请求都不会失败并返回响应 我在谷歌上搜索,发现我必须添加这个中间件 //CORS middleware var allowCrossDomain = function(req, res, next) { res.header('Access-Control-Allow-Origin

我正在开发一个MEAN-STACK应用程序。使用node的MEAN-cli包。 其中我使用的是黑暗天气API, 在包名称信息中。我有4个其他包在自定义文件夹的平均应用程序。 我如何启用CORS,以便所有API请求都不会失败并返回响应

我在谷歌上搜索,发现我必须添加这个中间件

 //CORS middleware
var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', 'example.com');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type');
    next();
}
我应该在哪里添加这个。在我们使用跨源请求的每个包中或在某个全局文件中


我曾尝试在的服务器路由文件中添加此中间件?信息包和在confile的express.js文件中,但它不起作用。

如果您只有一台express服务器,则只需添加一次中间件。您的其他模块可能作为中间件提供给服务器

如果在没有任何限定路径的情况下注册中间件函数,如
app.use(function(){…})
,则中间件将针对服务器处理的每个请求运行。任何给定的请求调用其他中间件并不重要


如果您有多个Express服务器同时运行(这是不太可能的),那么您需要将中间件添加到每个服务器。

因此,您的问题的实际解决方案是使用带有forecast.io api的
jsonp
回调,因为它们没有为客户端访问启用CORS头。像这样使用
$http.jsonp

$http.jsonp(url + lat + ',' + lng + '?callback=JSON_CALLBACK');
通常,要在expressjs服务器上启用CORS,请执行以下操作

  • 使用npm安装cors为express安装模块
  • require it
    var cors=require('cors')
  • 使用
    app.use(cors())在您的express app实例上设置它
  • cors
    模块将自动在响应上添加所有与AOR相关的头。或者,您也可以配置许多选项。检查

    如果你想自己做,你可以做以下几点

    var permitCrossDomainRequests = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type');
    // some browsers send a pre-flight OPTIONS request to check if CORS is enabled so you have to also respond to that
    if ('OPTIONS' === req.method) {
      res.send(200);
    }
    else {
      next();
    }
    };
    
    然后启用CORS中间件

    app.use(permitCrossDomainRequests);
    
    在末尾启用路由

    app.use(app.router);
    

    尝试过这一点,但在本地和本地都不起作用aws@ashish_pbh您在控制台或chrome dev tools的网络选项卡上遇到了什么错误?该错误用于访问forecast io问题,而不是您自己的服务器。在服务器上启用cors不会解决问题使用jsonp从客户端javascript调用forecast.io API。提示:像这样使用
    $http.jsonp
    $http.jsonp(url+lat+,'+lng+'?callback=JSON_callback')