2017-07-12 3 views
0

Ich versuche derzeit, eine 404-Seite zu senden, die eine .pug-Datei ist, wenn eine ID-Parameter nicht in der Datenbank ist. Ich rufe next() in der api-Route auf, und wenn ich es innerhalb des Callbacks der elatics-Suche tue, wird ein Fehler, der nicht gefunden wird, sowie zwei Cant set header after they are sent Nachrichten ausgegeben. Wenn ich die next() draußen rufe, wird es richtig nur die 404 Fehlermeldung und nicht die Header-Nachricht anzeigen. Ich bin mir nicht sicher, warum es das tut.next() und sendende 404-Seite

// Wenn Sie so vorgehen, wird die 404-Seite korrekt gesendet.

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

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

}); 

// Aber ich muss überprüfen, ob eine ID vorhanden ist, und dann die 404 werfen, aber es auf diese Weise tun, wird nicht funktionieren und ich werde halten eine Fehlermeldung über nicht in der Lage, immer Header zu setzen und die 404-Nachricht .

app.get ('/ Umleitung /: id', function (REQ, res, next) {

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

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

}); 
+0

Warum '' 'next()' ''? Sie sind fertig. '' 'res.status (404) .end();' '' wird Ihre 404 – Wainage

+0

in Ordnung Ich habe das versucht, aber es sendet immer noch nicht meine 404-Seite. In der Shell werden die Fehlermeldungen der Set-Header nicht mehr angezeigt, aber auch die 404-Fehlerseite, die nicht gefunden wurde, wird nicht angezeigt. Es zeigt, dass eine Menge von GET-Anfragen mit einem 304-Status zufrieden sind. – henhen

+0

Was bedeutet deinen Endpunkt? Briefträger? – Wainage

Antwort

0

In Express, die next() Funktion wird die Steuerung an die nächste Middleware für die Weitergabe. 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() 
}) 

in dem obigen Beispiel, wenn der erste next() die zweite Funktion (erf, res, next) genannt wird (wird die Funktion in Express.js Begriffe genannt Middleware) wurde exectued und log den Anfragetyp aus. So weiter hilft Ihnen hier nicht, da Sie keinen Middleware-Stack erstellen. Wenn Sie nur 404 Seiten lesen möchten, lesen Sie How to redirect 404 errors to a page in ExpressJS?