2016-06-12 5 views
0

익스프레스가있는 프레임 워크로 NodeJS 애플리케이션이 있습니다. 내 app.js에서 내가 다음과 같이 MySQL 데이터베이스에 내 연결을 확인하고 있습니다 파일은 :mysql이 에러 페이지로 리다이렉트, 익스프레스 프레임 워크가있는 NodeJS

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 mysql = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'root', 
    password : '', 
    database : 'nodejs' 
}); 

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

var app = express(); 

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

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
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('/', routes); 

// catch Database connection errors and forward to error handler 
app.use(function(req, res, next) { 
    connection.connect(function(err){ 
     if(err){ 
      var err = new Error('Database connection error! Try later please.'); 
      err.status = 503; 
      next(err);  
     } 
    }); 
}); 

// 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 handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: err 
    }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
    message: err.message, 
    error: {} 
    }); 
}); 


module.exports = app; 

내가 일을 기대하고있어 코드의 부분이있다 :

// catch Database connection errors and forward to error handler 
app.use(function(req, res, next) { 
    connection.connect(function(err){ 
     if(err){ 
      var err = new Error('Database connection error! Try later please.'); 
      err.status = 503; 
      next(err);  
     } 
    }); 
}); 

루트/

:

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

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index'); 
}); 

module.exports = router; 

내가 잘못된 암호를 사용하여 내 서버를 실행, 아무것도 페이지가 제공됩니다 happenes 없습니다하는 index.js, 여기 내 로그입니다

GET/304 17.940 ms - - 
GET /vendors/bootstrap/dist/css/bootstrap.min.css 304 2.915 ms - - 

DB 오류 (연결 또는 잘못된 쿼리)가 발생할 때 오류 페이지를 표시하는 방법에 대한 도움이 필요합니까?

감사

감사

+0

내가 생각하기에, 당신의 코드는 결코 데이터베이스 오류에 도달하지 않습니다. 경로 '/'의 논리를 공유하십시오. –

+0

당신이 지적한 것은 이유라고 생각하지 않습니다. 왜 루트가 빠졌을 때 404 페이지가 해고 되었습니까? 그래서 내가 생각하는 DB에 관한 코드의 부분에 도달했다. –

+0

'404' 오류가 없으며 제대로로드되었음을 나타내는'304 '오류입니다. –

답변

1

이 정말 좋지, 왜 당신은 middlewarerequest에 대한 connection를 확인하기 위해 모든 시간을 호출 할 수있는 것?

app.use(function(req, res, next) { 
    connection.connect(function(err){ 
     if(err){ 
      var err = new Error('Database connection error! Try later please.'); 
      err.status = 503; 
      next(err);  
     } 
    }); 
}); 

대신 코드에 문제가 생길 때 오류를 기록 할 수 있습니다. 이것은 catch 모두 errors입니다.

router.use(function (err, req, res, next) { 
    /* log the error internaly */ 
    logger.error(err); 
    res.status(err.statusCode || 500).json(err); 
}); 

이 다음은 더 당신을 도울 수있는 링크입니다 :

  1. http://expressjs.com/en/guide/database-integration.html
  2. http://expressjs.com/en/guide/error-handling.html

(304)에 대한 오류에서 dev에 콘솔이 시도하고 있는지 작동 방식 : Disabling Chrome cache for website development

업데이트 :

귀하의 DB 연결 : db.js

var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'root', 
    password : '', 
    database : 'nodejs' 
}); 

connection.connect(function(err) { 
    if (err) { 
    console.error('error connecting: ' + err.stack); 
    return; 
}}); 

module.exports = connection; 

이제 지금 errormiddleware에두고, 당신의 errormessagecode를 얻을 발생하면 index.js

var express = require('express'), 
    app = express(), 
    db = require('./db'); 

app.get('/',function(req,res){ 
    var query = db.query('Select * from your table', function(err, result) { 
    if (err) throw err; 
    }); 
}); 

server.listen(3000); 

보기에 던져 넣을 수 있습니다. public/databaseError.html

+0

아무도없는 소리가 내 질문을 이해하고 있습니다. 내가 NodeJs + express + mysql-node에서 DB가 작동하지 않으면 모든 사이트가 DB 쿼리에 의존하기 때문에 데이터베이스가 작동하는지 확인한다. DB 오류를 말하는 뷰 하나만 렌더링하고 나머지 뷰는 모두 표시해야한다. 렌더링하지 않는다 –

관련 문제