【发布时间】:2021-02-27 07:34:56
【问题描述】:
在开发中这工作正常,我最近更新了我的 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();
});
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”。
【问题讨论】:
-
在我更新之前代码似乎可以正常工作,除此之外我还添加了 recaptcha 以避免机器人注册
-
我也在客户端中添加了更改,以处理 recaptcha 密钥,并且只禁用提交按钮,但如果我创建一个新的“不重复”用户,这工作正常,问题是当我尝试注册一个注册用户
-
不,我用 recaptchaService 发送令牌:sendToken(token){ return this._http.post
(this.url + "/recaptcha-validate", {recaptcha: token}) }然后等待验证,然后向 api 发送 register() 请求 -
老实说 noAuthHeader 我只是复制代码 sn-p 使注册工作
-
example.com 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。
标签: javascript node.js mongodb express cors