【问题标题】:Enable CORS in Nodejs with expressjs4使用 express js 4 在 Node Js 中启用 CORS
【发布时间】:2014-09-13 08:25:39
【问题描述】:

我正在尝试在启用了 CORS 的节点服务器中托管独立的 JS 小部件。 我正在使用 Expressj 4 并且想要服务器 css、js 和字体文件。

我现在面临的问题是没有加载字体文件

var express = require('express');
var path = require('path');

var methodOverride = require('method-override');
var bodyParser = require('body-parser');


var app = express();


var environmentRoot =  require('path').normalize(__dirname );

app.set('views', environmentRoot + '/public');
app.engine('html', require('ejs').renderFile);

app.use(methodOverride());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.use(express.static(environmentRoot + '/public'));


app.all('*', function(req, res, next) {
   res.header("Access-Control-Allow-Origin", "*");
   res.header("Access-Control-Allow-Headers", "X-Requested-With");
   next();
});


var portNum = process.env.PORT || 3002;

app.listen(portNum, function (a) {
   console.log("Server listening in http://localhost:"+portNum);
});

JSON 包

{
   "name": "PackageApp",
   "version": "0.1.0",
   "dependencies": {
      "express" : "~4.9.0",
      "body-parser": "~1.8.1",
      "method-override": "~2.2.0",
      "ejs" : "~1.0.0"
  },
  "devDependencies": {
    "grunt": "~0.4.5",
    "grunt-html2js": "~0.1.0"
  }
}

【问题讨论】:

  • 你试过看开发者工具栏吗?标题是否存在? javascript 控制台或网络选项卡中是否有任何错误?
  • 来自“myhostname”的字体已被跨域资源共享策略阻止加载:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin 'localhost:3001'。
  • 我试过了,还是一样的问题。
  • 我的服务器是ubuntu,不知道有没有影响。
  • 我也试试,非常感谢您的建议。

标签: node.js express


【解决方案1】:

我会尝试从以下位置翻转这些陈述:

app.use(express.static(environmentRoot + '/public'));


app.all('*', function(req, res, next) {
   res.header("Access-Control-Allow-Origin", "*");
   res.header("Access-Control-Allow-Headers", "X-Requested-With");
   next();
});

app.all('*', function(req, res, next) {
   res.header("Access-Control-Allow-Origin", "*");
   res.header("Access-Control-Allow-Headers", "X-Requested-With");
   next();
});

app.use(express.static(environmentRoot + '/public'));

我希望在将正文发送到客户端之前需要设置标头

【讨论】:

  • Access-Control-Allow-Headers 在做什么?如果我想通过public/.htmlXMLHttpRequest() 发送soap 请求,我需要它吗?服务器端的res.header("Access-Control-Allow-Origin", "*") 是否足够,或者我还需要在js 客户端xmlhttp.setRequestHeader("Access-Control-Allow-Origin", "*"); 中吗?
  • 我误导了,我的服务器是我用js客户端访问的路由器。所以我可能需要客户端中的 setHeader ,但不确定。 html 在节点环境中运行,并且标头 - res.header() - 仅适用于此服务器环境,如果我想从外部访问它。
猜你喜欢
  • 2020-11-12
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 2016-07-04
  • 2019-06-25
  • 1970-01-01
相关资源
最近更新 更多