2017-08-12 3 views
0

Ich habe gerade Express-App generiert und benutzerdefinierte Route (/ Konfiguration) hinzugefügt. Aber wenn ich versuche, http://localhost:3000/configuration zu öffnen, gibt der Server 404 Not Found Fehler zurück. Ich habe den Code überprüft und verstehe nicht, wo der Fehler liegt.Warum Router in Express/node.js zurückgeben 404

app.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 

var index = require('./routes/index'); 
var config_page = require('./routes/configuration'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'pug'); 

app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', index); 
app.use('/configuration', config_page); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handler 
app.use(function(err, req, res, next) { 
    // set locals, only providing error in development 
    res.locals.message = err.message; 
    res.locals.error = req.app.get('env') === 'development' ? err : {}; 

    // render the error page 
    res.status(err.status || 500); 
    res.render('error'); 
}); 

module.exports = app; 

Routen/configuration.js (Routen/index.js ähnlich ist)

var express = require('express'); 
var router = express.Router(); 

/* GET configuration page. */ 
router.get('/configuration', function(req, res, next) { 
    res.render('configuration', { title: 'My App | Configuration' }); 
}); 

module.exports = router; 

Antwort

2

Dieser Code das Problem

ist
// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

Auch die aktuelle URL, die generiert wird durch Ihre Anwendung ist http://localhost:3000/configuration/configuration. Wenn Sie eine Abfrage zu diesem Thema machen, wird es funktionieren. Jetzt wenn Sie es mit http://localhost:3000/configuration verwenden möchten. dann müssen Sie auf dem Weg von überall entfernen. Möglicherweise können Sie in der Hauptdatei wie folgt ändern

app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', index); 
app.use('/',config_page); //-----------> this is the line you need to change 

Wie kann es für die Fehlerbehandlung verwendet werden. Entfernen Sie es und fügen Sie diesen Code hinzu, um einen Fehler in der Anwendung zu finden.

process.on('uncaughtException', function (err) { 
    // This should not happen 
    logger.error("Pheew ....! Something unexpected happened. This should be handled more gracefully. I am sorry. The culprit is: ", err); 
}); 
+0

Jetzt gibt es ‚Kann nicht GET/Konfiguration‘ – mxsin

+0

ich das glauben „Kann nicht GET/xyz“ Nachricht die Nachricht Standard 404 ist. Auch nicht sicher, wie diese Antwort auch etwas ändern würde, solange die Fehlerbehandlung am Ende nicht stören sollte. Ich bin mir ziemlich sicher, 404-Fehler zählen sowieso nicht als nicht abgefangene Ausnahmen – Poootaatoooo

+0

Ich habe gerade festgestellt, dass alles funktioniert, wenn Sie alle Routing in einer Datei (z. B. index.js) speichern. Wenn Sie jedoch für jede Seite eine separate ** .js ** in ** routes ** erstellen, wird der Fehler 404 für alle Seiten mit Ausnahme der Hauptseite zurückgegeben. Ich kann die Logik des Routers in Express nicht verstehen ... – mxsin