2017-07-12 10 views
0

Je suis actuellement en train d'essayer d'envoyer une page 404 qui est un fichier .pug chaque fois qu'un params ID ne se trouve pas dans la base de données. J'appelle next() dans la route api, et quand je le fais dans le rappel de recherche élastique, il va lancer une erreur de page non trouvée ainsi que deux messages Cant set header after they are sent. Lorsque j'appelle le next() à l'extérieur, il affichera correctement le message d'erreur 404 et non le message d'en-tête. Je ne suis pas sûr de pourquoi il le fait.next() et l'envoi 404 page

// Le faire de cette façon enverra correctement la page 404.

app.get('/redirect/:id', function(req, res, next) { 
     let found = false; 

     if (!found) { 
      return next(); 
     } 

}); 

// Mais je dois vérifier si un ID existe puis jeter le 404, mais cette façon de faire ne fonctionnera pas et je vais continuer à faire une erreur de ne pas être en mesure de définir les en-têtes et le 404 un message .

app.get ('/ redirection /: id', function (REQ, res, à côté) {

search.byId(req.params.id, (err, card) => { 
     if (err) log.log(err); 

     if (!card || card === undefined) { 
      return next(); 
     } 
    }); 

}); 
+0

Pourquoi '' 'next()' ''? Vous avez terminé. '' 'res.status (404) .end();' '' retournera votre 404 – Wainage

+0

okay j'ai essayé, mais il n'envoie toujours pas ma page 404. Dans le shell, les messages d'erreur des en-têtes ne s'afficheront plus mais la page d'erreur 404 non trouvée ne s'affichera pas non plus. Cela montre qu'un groupe de demandes GET sont en train de se retrouver avec un statut 304 – henhen

+0

Qu'est-ce qui appelle votre point final? Facteur? – Wainage

Répondre

0

express, la fonction suivante() est destiné à faire passer le contrôle à l'autre middleware. Using Express Middleware

app.use('/user/:id', function (req, res, next) { 
    console.log('Request URL:', req.originalUrl) 
    next() 
}, function (req, res, next) { 
    console.log('Request Type:', req.method) 
    next() 
}) 

dans l'exemple ci-dessus, lorsque le premier côté() est appelée la deuxième fonction (req, res, à côté) (en termes de express.js la fonction est appelée middleware) a obtenu exectued et le journal sur le type de requête Alors ne vous aide pas ici puisque vous ne construisez pas une pile middleware. Si vous voulez juste lire la page 404 How to redirect 404 errors to a page in ExpressJS?