乐趣区

关于eggjs:eggjs-连接远程-mysql-数据库

作为一个正在学习后端常识的菜鸟,最后存储数据的形式是通过 fs 模块存到本地的 JSON 文件中的。起初感觉太 low 还是得用上 mysql。

服务器 mysql 装置

我是在腾讯云的宝塔面板界面化装置的,本地装置能够去这里下载并装置。装置实现后,试了一些命令确定装置胜利。

# 查看 mysql 的状态
$ systemctl status mysqld

# 启动 mysql
$ systemctl start mysqld

# 应用 root 权限登录 mysql
$ mysql -u root -p

题外话,忽然想起来无论是 nginx 还是 mysql 的启动和查看状态都是用的 systemctl 命令。

$ systemctl start nginx
$ systemctl status nginx

mysql 连贯

我的 node 我的项目用到的是 egg.js。文档十分敌对,很粗疏的阐明了如何连贯数据库,详见 MySQL – Egg。

装置依赖库

$ npm i --save egg-mysql

开启插件

// config/plugin.js
exports.mysql = {
  enable: true,
  package: 'egg-mysql',
};

配置数据库信息

// 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,
};

遇到的问题

无法访问近程服务器

发现是我的腾讯云服务器的 3306 端口未凋谢,关上之后就好了。

找不到 ip 地址

我在配置 host 的时候多加了 http:// 前缀,导致报错。查了材料后才晓得只有 IP 号或者域名即可。

    host: '101.33.37.187',

用户名写错

一开始用了 yang@localhost 这个用户名,起初发现 @localhost 后缀并不需要。

写一个 service 验证

const Service = require("egg").Service;

class DoneService extends Service {async findAll() {
    // 如果 咱们拿到用户 id 从数据库获取用户详细信息
    const user = await this.app.mysql.query("SELECT * FROM `done-tasks` WHERE 1", "");
    return {user};
  }
}

module.exports = DoneService;

最初

终于在一直地尝试后,连贯上了近程数据库,开始了数据冒险之旅。

退出移动版