Node.js 连接 mysql 遇到的问题

2023-01-07 07:52:39 +08:00
 dyxiaodong2022

当 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,
    // ...
  }
}
1453 次点击
所在节点    程序员
2 条回复
zhennann
2023-01-07 09:25:18 +08:00
callback 、promise 、await ,三者用混了
humbass
2023-01-08 00:49:47 +08:00
promise 里头就不要用 async await 语法

如果连接不成功,直接抛出错误即可。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/907118

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX