首页 > 解决方案 > CORS 标头问题表达 Angular

问题描述

在开发中这工作正常,我最近更新了我的 vps 中的代码,我在控制台中收到错误:从源 'https:// 访问 'https://www.example.con/api/register' 处的 XMLHttpRequest example.com' 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。我尝试过:

app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Authorization, X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Allow-Request-Method');
    res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE');
    res.header('Allow', 'GET, POST, OPTIONS, PUT, DELETE');
    next();
});
和:app.use(cors()); 但我在控制台中仍然有相同的消息。
  noAuthHeader = { headers: new HttpHeaders({ 'NoAuth': 'True' }) };
  
    postUser(user: User){
    return this.http.post(this.url + '/register', user, this.noAuthHeader);
  }

    register: (req, res, next) => {
        let user = new User();
        user.email = req.body.email;
        user.password = req.body.password;
        user.domain = req.body.domain;
    
        user.save((err, doc) => {
            if (!err)
                res.send(doc);
            else {
                if (err.code == 11000) {
                    if(err.keyValue.hasOwnProperty('domain')){
                        res.status(422).send(['Name repeated']);
                    }
                    if(err.keyValue.hasOwnProperty('email')){
                        res.status(422).send(['Email repeated']);
                    }               
                } else {
                    return next(err);
                }
            }
        });
    },

我在代码中所做的修改是 register() api 中的验证。我正在使用 mongo DB 并检查错误代码 11000 以获取 DB(电子邮件和域字段)中重复的唯一模型数据。当我尝试注册重复的电子邮件或域时,控制台会引发 CORS 错误。

已编辑:我在控制台中收到此错误:

/home/myapp_full/myapp_v0.2/node_modules/mongoose/lib/helpers/promiseOrCallback.js:19 抛出错误;^ TypeError:无法读取未定义的属性“hasOwnProperty”。

标签: javascriptnode.jsmongodbexpresscors

解决方案


我认为你不需要 CORS,除非你真的打算拥有两个独立的网站:www.example.comexample.com.

相反,如果您的服务器设置为接受来自两者的请求并且不重定向,我建议您尽可能在代码中处理重定向,以便您选择一个规范的 URL: Eitherexample.comwww.example.com. 除此之外,只要两台服务器上都存在脚本,只需加载不带 URL 的脚本(aka "/register", not this.url + "/register"


推荐阅读