美文网首页
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