分享egg+ts连接mysql遇到的几处坑

如题

官方文档提到的那些就不继续说明了,分享亲身经历的三处比较浪费时间的地方
首先放张官网的图,记住这张图!!!(次数*1)
image.png

坑点一:ts报错

对跟我一样刚刚接触ts的朋友来说,遇到ts报错是需要花点时间处理的,正常跟着文档走完后,遇到的第一个问题就是ts报错

2021-08-12 01-23-20 的屏幕截图.png

解决办法:
编辑typings/index.d.ts

import 'egg';

declare module 'egg' {
  interface Application {
    mysql: any;
  }
}
复制代码

坑点二:配置文件放错地方

注意官网这句话 (次数*2)

image.png

这是官方给的写法:

// config/config.${env}.js
exports.mysql = {
  // 单数据库信息配置
  client: {
    // host
    host: 'mysql.com',
    // 端口号
    port: '3306',
    // 用户名
    user: 'test_user',
    // 密码
    password: 'test_password',
    // 数据库名
    database: 'test',
  },
  // 是否加载到 app 上,默认开启
  app: true,
  // 是否加载到 agent 上,默认关闭
  agent: false,
};
复制代码

实现时候的写法:(注意是写在那个导出函数里面)

  config.mysql = {
    // 单数据库信息配置
    client: {
      // host
      host: 'localhost',
      // 端口号
      port: '3306',
      // 用户名
      user: 'root',
      // 密码
      password: '123456',
      // 数据库名
      database: 'mydb',
    },
    // 是否加载到 app 上,默认开启
    app: true,
    // 是否加载到 agent 上,默认关闭
    agent: false,
  };
复制代码

坑点三:plugin引入写错

不知道大家遇没遇到过这样的报错,按正常mysql应该会挂载到了this.app,但调用就报错,显示undefined

2021-08-12 01-30-28 的屏幕截图.png

service代码:

const user = await app.mysql.select('user');
复制代码

起初以为是mysql密码不对,或是哪里设置不对,检查了一圈mysql没问题,下载了一个可视化db工具,也能正常连接,于是在看egg的配置,也跟官网一样,这就比较离谱了,后来猛地想起这张图(次数*3)

image.png

这是官网推荐的plugin配置

2021-08-12 01-33-36 的屏幕截图.png

我改完之后生效的代码

2021-08-12 01-35-09 的屏幕截图.png

走过这三处坑,到此,egg就可以正常和数据库进行交互了