ExpressJS: res.redirect () ne fonctionne pas comme prévu?
J'ai eu du mal pendant 2 jours, sur ce point, googlé et stackoverflowed tout ce que je pouvais, mais je ne peux pas travailler.
Je suis en train de construire un simple noeud d'application (+Express + Mangouste) avec une page de connexion qui redirige vers la page d'accueil. Voici mon serveur de Café de code :
app
.get '/', (req, res) ->
console.log "Here we are : root"
res.sendfile(__dirname + '/index.html')
.get '/login', (req, res) ->
console.log "Here we are : '/login'"
res.sendfile(__dirname + '/login.html')
.post '/credentials', (req, res) ->
console.log "Here we are : '/credentials'"
# (here comes credentials validation stuff with Mongoose)
res.redirect '/'
La page de connexion fait une requête POST /informations d'identification, où les données publiées sont vérifiées. Les travaux de cette. Je peux voir "Ici, nous sommes : '/informations d'identification" dans le Nœud de la console.
Puis vient la question : la res.redirection ne fonctionne pas correctement. Je sais qu'elle ne parvenir à un '/' route, parce que :
- Je peux voir "Ici, nous sommes : racine" dans le Nœud de la console
- L'index.html la page est envoyée au navigateur qu'une reponse, mais ne sont pas affichés dans la fenêtre.
Chrome inspecteur affiche la requête POST de réponse, je PEUX voir le code HTML envoyé au navigateur de l'inspecteur, mais l'URL reste /de connexion et la page de connexion est toujours affiché sur l'écran.
(Edit) La redirection est dans la Mangouste de la fonction de rappel, il n'est pas synchrone (NodeJS). J'ai juste enlevé la Mangouste de validation des trucs pour plus de clarté.
J'ai essayé d'ajouter res.end()
ne fonctionne pas
J'ai essayé
req.method = 'get';
res.redirect('/');
et
res.writeHead(302, {location: '/'});
res.end();
Ne fonctionne pas
Ce que je fais mal? Comment puis-je réellement quitter le '/login' page', rediriger le navigateur de '/' et afficher le code HTML qu'il a reçu?
Un million de mercis pour votre aide d'avance 🙂
source d'informationauteur Jeremy Thille
Vous devez vous connecter pour publier un commentaire.
Le problème peut ne pas coucher avec le backend, mais avec l'interface. Si vous êtes en utilisant AJAX pour envoyer la requête POST, il est spécialement conçu pour ne pas changer votre url.
Utilisation
window.location.href
après l'AJAX demande est terminée (dans le.done()
) pour mettre à jour l'URL avec le chemin d'accès souhaité, ou utiliser JQuery:$('body').replaceWith(data)
lorsque vous recevez le code HTML de retour de la demande.Il est quasiment certain que vous faites un appel asynchrone de vérifier la Mangouste, mais vous n'avez pas structuré le code de sorte que la redirection se produit seulement après l'appel asynchrone retourne un résultat.
En javascript, le
POST
ressemblerait à quelque chose:Vous pouvez également voir les questions comme Appel asynchrone dans node.js vs mangouste parallèle/problèmes liés à l'...
Ajouter les lignes suivantes dans votre /route :
Votre navigateur va rendre le fichier au lieu de télécharger
J'ai travaillé sur la mise en œuvre de nodemailer dans mon NextJS app avec Express. A avoir ce problème et suis tombé sur ce. J'ai eu de l'événement.preventDefault() dans ma fonction qui a tir le formulaire pour soumettre et qui empêche la redirection, je l'ai pris et il était de rediriger en conséquence.