美文网首页
node.js + express 后端项目小坑

node.js + express 后端项目小坑

作者: 程序员不务正业 | 来源:发表于2020-01-19 00:43 被阅读0次

能连上数据库,本地测试一切正常

项目上线没问题,pm2管理也正常

运行一段时间后出现以下错误

PROTOCOL_CONNECTION_LOST
PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR

两天天以来都是凌晨断掉,重启项目又好了

原因

因为mysql连接断开,没有做异常处理,导致错误的代码继续在运行,导致node没有结束进程,所以node进程这些都好着,就是连不上数据库,重启服务就又恢复正常。

最后处理方案为:连接池

const mysql = require('mysql');

const pool = mysql.createPool({
   host: '16.22.80.98',
   user: 'root',
   password: 'xxxxx',
   database: 'xxxx',
   port: '3306'
})

exports.query = (sql, params = []) => {
   return new Promise((resolve, reject) => {
       pool.getConnection((err, connection) => {
           if (err) {
               return reject(err);
           }
           connection.query(sql, params, (err, result) => {
               //释放连接
               connection.release();
               if (err) {
                   return reject(err);
               }
               resolve(result);
           });
       });
   });
};

连接池卡死问题

const mysql = require('mysql');

const pool = mysql.createPool({
 host: '',
 user: 'root',
 password: '',
 database: '',
 port: '3306'
})

exports.query = (sql, params = []) => {
 return new Promise((resolve, reject) => {
     pool.getConnection((err, connection) => {
         if (err) {
             return reject(err);
         }
         connection.query(sql, params, (err, result) => {
             //释放连接
             // pool.releaseConnection(connection)
             if (err) {
                 return reject(err);
             }
             resolve(result);
         });
//这么设置,能够解决卡死问题
         connection.release();
     });
 });
};

相关文章

网友评论

      本文标题:node.js + express 后端项目小坑

      本文链接:https://www.haomeiwen.com/subject/howlzctx.html