【问题标题】:Node.js CORS errorNode.js CORS 错误
【发布时间】:2018-08-08 11:06:14
【问题描述】:

我使用 Node 作为后端服务器,使用 Angular 4 作为前端。我正在尝试通过soap协议发送查询结果。该功能工作正常,但在浏览器中安装了CORS PLUGIN。但是如果没有这些插件,我该如何解决它。

我已经搜索了一些解决方案,并在我的节点文件中安装了 CORS 包,并对我的 server.js 文件执行了以下操作。

//## =======BASE SETUP=======

const arangojs = require('arangojs');
const express = require('express');
const aqlQuery = arangojs.aqlQuery;
const bodyParser = require('body-parser');

var cors = require('cors');
var app = express();
app.use(cors());
app.use(function(req, res, next) {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
  res.setHeader('Access-Control-Allow-Credentials', true);
  next();
});

但这没有帮助。错误仍然存​​在。如何解决此错误。我已将我的服务器端代码发布如下:

var soap = require('strong-soap').soap;
var http = require('http');
var fs = require('fs');

function dbQuery() {
  var response = db.query(aqlQuery `
                 LET startVertex = (FOR doc IN spec
                 FILTER doc.serial_no == '"123456abcde"'
                 LIMIT 2
                 RETURN doc
                 )[0]

                FOR v IN 1 ANY startVertex belongs_to
                RETURN v.ip`, {
    bindVar1: 'value',
    bindVar2: 'value',
  });
  console.log("response is " + response);
  return response;

}

function main2() {
  var result2 = dbQuery();

  return result2.then(function(test) {

    console.log("test is " + JSON.stringify(test._result));
    var IP = test._result.filter(Boolean);
    console.log("Ip is " + IP);

    var xml = require('fs').readFileSync('check_username.wsdl', 'utf8');
    var soap_msg = '<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:examples:CheckUserNameService"$
    '<soapenv:Header/>' + '<soapenv:Body>' + '<urn:CheckUserNameResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' + '<status xsi:type="xsd:string">' + JSON.stringify(test._result) + '</status>' + '</urn:CheckUserNameResponse>' +
      '</soapenv:Envelope>';

    var server = http.createServer(function(request, response) {
      response.end(soap_msg);
    });

    var port = 8000;
    server.listen(port);
    var soapServer = soap.listen(server, '/test', xml);
    console.log('SOAP service listening on port ' + port);
  });
}
main2();

错误

【问题讨论】:

标签: node.js cors


【解决方案1】:

您可以像这样将选项传递给core 函数:

const corsOpts = {
  origin: '*',

  methods: [
    'GET',
    'POST',
  ],

  allowedHeaders: [
    'Content-Type',
  ],
};

app.use(cors(corsOpts));

【讨论】:

  • 我已经添加了你的答案,但仍然是同样的错误。也应该对我的前端做点什么吗?
  • 不错且简单的解决方案。坚持下去。
【解决方案2】:

我可能迟到了,但我希望这对我有所帮助我解决了 node.js 的 cors 政策,只需添加:

app.use(function(req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
    res.setHeader('Access-Control-Allow-Credentials', true);
    next();
});

对我来说,当我在安装 cors 依赖项后使用 app.use (cors) 时,它只是冻结了我的代码并出现网络连接错误,所以我只是添加了上面的代码,没有任何依赖项,它对我来说很好。

【讨论】:

  • 好吧,永远不会太晚。它可能会对某人有所帮助。
【解决方案3】:

app.use((req, res, next) => {
  //allow access from every, elminate CORS
  res.setHeader('Access-Control-Allow-Origin','*');
  res.removeHeader('x-powered-by');
  //set the allowed HTTP methods to be requested
  res.setHeader('Access-Control-Allow-Methods','POST');
  //headers clients can use in their requests
  res.setHeader('Access-Control-Allow-Headers','Content-Type');
  //allow request to continue and be handled by routes
  next();
});

【讨论】:

    【解决方案4】:

    我刚刚偶然发现了同样的问题,上面的答案没有帮助。在进一步阅读和测试未添加 CORS 标头的问题时,我得出结论,app.use() 调用的顺序很重要。

    因此,如果您需要全局 CORS 设置,请确保在使用 app.use('/myroute', myRoute); 将路由添加到应用程序之前调用:app.use(cors(corsOption))

    【讨论】:

      猜你喜欢
      • 2015-03-09
      • 2018-06-29
      • 2020-07-07
      • 2015-11-21
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 2015-11-26
      相关资源
      最近更新 更多