javascript - Express:内部服务器错误导致服务器停止

标签 javascript mysql node.js express

我的问题是,如果出现服务器错误,Express-Server 就会关闭。例如,如果 Express 无法连接到数据库,我会收到错误消息:

Error: connect ECONNREFUSED 127.0.0.1:3306 (..)

然后服务器不再运行。我尝试用 this guide 处理我的服务器错误正如您在我的代码片段中看到的。我希望服务器即使在抛出错误时也能继续。

 const express = require('express');
 const methodOverride = require('method-override');
 const app = express();
 const mysql = require('mysql');
 const connection = mysql.createConnection({
     host     : 'localhost',
     user     : 'XXX',
     password : 'XXX'
 });
 app.use(methodOverride());
 app.use(function(err, req, res, next) {
     res.status(500);
     // res.render('error', { error: err });
     res.status(500).send('Something broke!');
 });


 /*Webservices: */
 app.get('/', function (req, res) {
     res.send('Hello World!');
 });

 app.get('/database', function (req, res) {
         connection.query('SELECT 2 AS solution', function (err, rows, fields) {
             if (err) throw err;
             console.log('The solution is: ', rows[0].solution);
             res.send(rows[0].solution.toString());
         });
 });


 /*Start Server: */
 app.listen(3000, function () {
     console.log('Example app listening on port 3000!');
 });

最佳答案

当您从 connection.query() 中收到错误时,您将抛出一个未处理的异常。保持服务器运行的关键是适当处理可能发生的所有错误,并确保在出现该错误时发生(对您的服务器而言)安全的事情。

在这种情况下,由于这是在异步回调内部,因此您可以安全处理该错误的唯一位置是在该回调本身内部。您不能抛出异常并从普通的异步回调中在更高级别捕获它。

所以,我建议这样:

app.get('/database', function (req, res) {
    connection.query('SELECT 2 AS solution', function (err, rows, fields) {
         if (err) {
             res.status(501).send("database query error");
         } else {
             console.log('The solution is: ', rows[0].solution);
             res.send(rows[0].solution.toString());
         }
    });
 });

关于javascript - Express:内部服务器错误导致服务器停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42541336/

相关文章:

javascript - 从包含html的js变量中解析数据

php - Mysql原生全文搜索性能

java - 使用 corejava 程序进行无密码的 MySQL 连接(用户 'root' @'localhost' 的访问被拒绝)

javascript - 相思木- Handlebars : Unable to render view: The partial could not be found

javascript - 如何将音频 blob(数据)文件从 JavaScript 发送到 Struts 2 中的 Java 服务器操作?

javascript - Highcharts:将图例符号设为正方形或矩形

javascript - 对于 3D Canvas 游戏,此代码中的 1/cos(x) 有什么意义?

mysql - 合并两个表而不使用 mysql 中的连接?

javascript - 如何在 webdriverjs 中等待 takeScreenshot 截取屏幕截图

javascript - 如何将JSON解析后的数据插入MYSQL