V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
dyxiaodong2022
V2EX  ›  程序员

Node.js 连接 mysql 遇到的问题

  •  2
     
  •   dyxiaodong2022 ·
    dy-xiaodong2022 · 2023-01-07 07:52:39 +08:00 · 1717 次点击
    这是一个创建于 711 天前的主题,其中的信息可能已经有所发展或是发生改变。

    当 nodejs 运行时间长之后再去请求 nodejs 的接口会报错

    Error: Packets out of order. Got: 0 Expected: 9
    ...
    code: 'PROTOCOL_PACKETS_OUT_OF_ORDER',
    fatal: true
    

    数据库文件database.js部分代码

    const mysql = require('mysql');
    const fs = require('fs');
    const secret = require('./secret.json');
    
    const isDev = process.env.NODE_ENV === 'development';
    
    const connection = mysql.createConnection({
      host: 'localhost',
      user: isDev ? secret.mysql.dev.username : secret.mysql.product.username,
      password: isDev ? secret.mysql.dev.password : secret.mysql.product.password,
      database: "hpchat",
      connectTimeout: 1000 * 60 * 10,
    })
    
    module.exports = async res => {
      let response
      if (res) response = require('./response.js')(res);
      const query = (sql, params, callback) => {
        return new Promise(async (resolve) => {
          // check mysql connection is timeout
          if (connection.state === 'disconnected') {
            await connection.connect();
          }
          connection.query(sql, params, (err, result) => {
            if (err) {
              if (callback) callback(err);
              if (!fs.existsSync('./error_log.txt')) {
                fs.writeFileSync('./error_log.txt', '');
              }
              const file = fs.readFileSync('error_log.txt');
              const path = res.req.url;
              const message = `[${new Date().toLocaleString()}] ${path} | ${sql} | ${err.message}\n`;
              fs.writeFileSync('error_log.txt', message + file);
              if (res) response(500, {
                "message": {
                  "zh": "数据库异常,请查看日志",
                }
              })
            } else {
              resolve(result);
              if (callback) callback(null, result);
            }
          })
        })
      }
      return {
        query,
        // ...
      }
    }
    
    zhennann
        1
    zhennann  
       2023-01-07 09:25:18 +08:00
    callback 、promise 、await ,三者用混了
    humbass
        2
    humbass  
       2023-01-08 00:49:47 +08:00
    promise 里头就不要用 async await 语法

    如果连接不成功,直接抛出错误即可。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5281 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:45 · PVG 13:45 · LAX 21:45 · JFK 00:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.