【问题标题】:ExpressJS not sending Access-Control-Allow-Origin headerExpressJS 未发送 Access-Control-Allow-Origin 标头
【发布时间】:2017-02-17 05:50:15
【问题描述】:

我正在做一个项目,我需要一个 Angular Web 应用程序才能访问基于节点/express 的后端,并且我正在尝试使用 Cors。但是,快递服务器似乎不会发送 Access-Control-Allow-Origin 标头,我不知道为什么。我尝试过创建这样的中间件:

this.app.use((request, response, next) => {
    response.header("Access-Control-Allow-Origin", "*");
    next();
}

我还尝试使用 setHeader()、header()、set() 和 append() 为每个请求单独执行类似的操作,但这些都不起作用。我目前正在使用 cors npm 包,但这也不适用于以下代码:

this.app.use(cors({
        origin: "http://localhost/4200"
    }));
this.app.options("*", cors({
            origin: "http://localhost/4200"
        })
    );

我已经检查过这些都没有通过邮递员将相关标头添加到响应中。 Express 正在添加“错误”标头,我用它来提供人类可读的错误描述,而不是“Access-Control-Allow-Origin”。

我正在用 TypeScript 写这个。

【问题讨论】:

    标签: angularjs node.js express typescript


    【解决方案1】:

    【讨论】:

    • 是的,我重启了快递服务器。
    【解决方案2】:
    1. 您是否检查过您的中间件是按请求调用的吗?
    2. 在调用listen 之前,您是否检查过您的中间件是否已注册?

    如果两者都得到保证,则必须有一个原因,具体取决于您的应用程序的其他部分。因此,您应该提供有关文件和目录的启动和结构的更多信息。

    【讨论】:

    • 中间件是在listen被调用之前添加的。
    • 好的,看起来中间件没有被调用。
    【解决方案3】:

    原来问题不在于代码,而在于编译器设置。我删除并重新创建了 tsconfig.json 文件,现在它可以工作了。

    【讨论】:

      猜你喜欢
      • 2016-01-11
      • 2015-07-31
      • 2019-02-07
      • 2018-10-28
      • 2016-01-21
      • 2018-07-18
      • 2019-03-18
      • 2018-10-20
      • 2018-09-19
      相关资源
      最近更新 更多