【问题标题】:Dealing with CORS in Node / express static file在 Node/express 静态文件中处理 CORS
【发布时间】:2018-07-17 15:35:46
【问题描述】:

尝试处理 CORS 设置一个简单的 Node / Express 服务器,如下所示:

const express = require('express');
var cors = require('cors');
const app = express();

const port = process.env.PORT || 3000;

app.use(cors());

app.use(express.static('public'));

app.listen(port, () => {
  console.log('Server active on port: ', port);
});

使用这个 cors 库:https://www.npmjs.com/package/cors

剩下的是一个简单的应用程序,使用 JQuery ajax 来获取一些数据...在启用 CORS chrome 扩展的情况下工作,但无法弄清楚如何设置一个简单的服务器,这样我就不必使用 chrome 扩展...

【问题讨论】:

  • 那么,当您关闭 chrome 扩展程序时,您在控制台中收到什么错误?
  • 在我设置服务器之前,我正在使用扩展程序,它工作得很好......设置服务器并使用库以便不使用扩展程序。错误是:请求的资源上存在允许来源标头。 Origin ‘http//localhost:3000’因此不允许访问...
  • 请在下面查看我的答案。
  • @SakoBu 你能粘贴确切的错误吗?您是说 Allow origin 标头存在还是不存在?在禁用 CORS 后还要添加错误。尝试在隐身选项卡中打开,因为 chrome 缓存 CORS 标头。

标签: node.js express cors


【解决方案1】:

您可以尝试设置要传递给您的cors 包的选项,像这样,

const corsOptions = {
    origin: process.env.CORS_ALLOW_ORIGIN || '*',
    methods: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS'],
    allowedHeaders: ['Content-Type', 'Authorization']
};

app.use(cors(corsOptions)); 

希望这会有所帮助。

【讨论】:

  • 试过......没有骰子......这真的让我难过......试过lib,没有lib......发布了与lib创建者的问题相同的问题......也许他'让我知道...
  • 我可以尝试这样的事情:app.get('/', (req, res) => { res.sendFile(path.join(__dirname, 'public')); });看看这是否有效......
【解决方案2】:

你可以使用这样的 cors 中间件

 const corsMiddleware = (req: Request, res: Response, next: NextFunction) => {
  logger.debug(req.method + " at " + req.url);
  res.setHeader("Access-Control-Allow-Origin", "*"); // you can optionally replace * with your server address
  res.setHeader("Access-Control-Allow-Credentials", "true");
  res.setHeader(
    "Access-Control-Allow-Methods",
    "POST, GET, PUT, DELETE, OPTIONS"
  );
  res.setHeader(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept, Authorization"
  );

  next();
};

要将此中间件用于各种请求,请使用

app.all("*", corsMiddleware);

这将在所有请求中添加这些标头。

【讨论】:

  • 由于 OP 使用 cors 包,我相信不需要发送额外的 headers。
  • @DavidR 显然 cors 没有与 OP 合作,因为他说他需要使用 chrome cors 插件的问题。我曾经面临同样的问题,chrome 上的 cors 插件重写了服务器设置的标头。在这种情况下,操作需要删除 cors 插件并尝试这种方式我猜
猜你喜欢
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 2016-07-23
  • 2015-12-01
相关资源
最近更新 更多