2017-08-12 20 views
0

私はちょうどExpressアプリケーションを生成し、カスタムルート(/構成)を追加しました。しかし、http://localhost:3000/configurationを開こうとすると、サーバーは404 Not Foundエラーを返します。私はコードをチェックし、エラーがどこにあるのか分からない。Express/node.jsのルーターが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; 

ルート/ configuration.js(ルート/ index.jsも同様である)

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; 

答えて

2

このコードは、問題

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

また、生成された現在のURLあなたのアプリケーションによってhttp://localhost:3000/configuration/configurationです。これについてクエリを作成すると、それが機能します。今すぐ使用したい場合はhttp://localhost:3000/configurationです。どこからでもパスを削除する必要があります。このようなメインファイルで変更することができます

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 

エラー処理にどのように使用できますか。それを削除し、このコードを追加してアプリケーションのエラーをキャッチします。

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

「GET /設定できません」 – mxsin

+0

「Can not GET/xyz」というメッセージがデフォルトの404メッセージだと思います。また、どのようにこの答えが何かを変えるかどうかもわかりません。エラー処理が終わったら、干渉してはいけません。とにかく404エラーがキャッチされない例外としてカウントされないことは間違いないと私は確信しています。 – Poootaatoooo

+0

すべてのルーティングを1つのファイル(index.jsなど)に保存するとすべて正常に動作することに気付きました。しかし、各ページに対して、**経路**で別々の** js **を作成すると、サーバーはメインページを除くすべてのページについて404エラーを返すようになります。私はExpressのルータのロジックを理解できません... – mxsin

関連する問題