En dev, cela fonctionne bien, j'ai récemment mis à jour le code dans mon vps et j'obtiens une erreur dans la console: Acces to XMLHttpRequest à 'https: //www.example.con/api/register' à partir de l'origine 'https: // example.com 'a été bloqué par la stratégie CORS: aucun en-tête' Access-Control-Allow-Origin 'n'est présent sur la ressource demandée. J'ai essayé avec:
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); } } }); },
et: app.use (cors ()); mais j'ai toujours le même message dans la console.
noAuthHeader = { headers: new HttpHeaders({ 'NoAuth': 'True' }) }; postUser(user: User){ return this.http.post(this.url + '/register', user, this.noAuthHeader); }
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(); });
Les modifications que j'ai faites dans le code sont la vérification dans register () api. J'utilise mongo DB et vérifie le code d'erreur 11000 pour les données de modèle uniques répétées dans DB (champs de messagerie et de domaine). La console renvoie une erreur CORS lorsque j'essaie d'enregistrer un e-mail ou un domaine en double.
EDITED: j'obtiens cette erreur dans la console:
/home/myapp_full/myapp_v0.2/node_modules/mongoose/lib/helpers/promiseOrCallback.js:19 erreur de lancement; ^ TypeError: Impossible de lire la propriété 'hasOwnProperty' non définie.
3 Réponses :
Une fois, j'ai eu le même problème avec Angular et je l'ai résolu en supprimant les en-têtes CORS dans le back-end. J'espère que cela fonctionne pour vous.
Je ne sais pas comment la suppression des en-têtes CORS dans votre propre backend résoudrait une erreur en raison d'un manque d'en-têtes CORS
Je pense que cela a fonctionné car l'hôte que j'ai utilisé n'en a pas besoin
clairement OP fait, puisque l'erreur est Aucun en-tête `` Access-Control-Allow-Origin '' n'est présent , il y a donc une absence d'en-têtes CORS qui est à l'origine du problème
Je ne pense pas que vous devriez avoir besoin de CORS à moins que vous n'ayez réellement l'intention d'avoir deux sites Web distincts: www.example.com
et example.com
.
Si, à la place, votre serveur est configuré pour accepter les demandes des deux et ne redirige pas, je vous recommande de gérer les redirections dans votre code dans la mesure du possible, afin de sélectionner une URL canonique: soit example.com
ou www.example.com
. Sauf que, tant que le script existe sur les deux serveurs, il suffit de charger le script sans l'URL (aka "/register"
, pas this.url + "/register"
)
Résolu: Il semble que Linux et Windows lancent différents messages d'erreur, j'ai modifié ce morceau de code et cela fonctionne bien, de toute façon la réponse est juste `` email ou nom répété '' et je voudrais gérer chaque donnée unique, j'attends toujours pour une mise à niveau, merci pour votre temps.
user.save((err, doc) => { if (!err) res.send(doc); else { if (err.code == 11000) { res.status(422).send(['Email or name repeated']); } else { return next(err); } } });
le code semble bien fonctionner avant de mettre à jour ceci, en plus de cela, j'ajoute également recaptcha pour éviter l'enregistrement des bots
J'ajoute également les modifications dans le client, pour gérer la clé de recaptcha et ne désactiver que le bouton d'envoi, mais si je crée un nouvel utilisateur `` non répété '', cela fonctionne bien, le problème est lorsque j'essaye d'inscrire un utilisateur enregistré
non, j'envoie un jeton avec un recaptchaService: sendToken (token) {return this._http.post <any> (this.url + "/ recaptcha-validate", {recaptcha: token})} puis j'attends la validation puis envoie le registre () demande à l'API
pour être honnête noAuthHeader je copie simplement l'extrait de code pour que l'enregistrement fonctionne
example.com a été bloqué par la stratégie CORS: aucun en-tête «Access-Control-Allow-Origin» n'est présent sur la ressource demandée.
l'application fonctionne bien lorsque j'enregistre un nouvel utilisateur, le problème est lorsque j'essaye de gérer un utilisateur répété dans le modèle mongoDB en utilisant 'unique: true'
Est-ce que www.example.com et example.com sont deux serveurs séparés ou simplement deux adresses Web distinctes pointant vers le même serveur Web?
J'obtiens cette erreur dans la console: MongoError: E11000 collection d'erreurs de clé en double: myapp.users index: email_1 clé dup: {: "test@test.com"}, je dev sur Windows et cela génère une erreur msj différente, i pense que je trouve le problème, lance «TypeError: impossible de lire la propriété« hasOwnProperty »de non défini»