作为一个正在学习后端知识的菜鸟,最初存储数据的方式是通过 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;

最后

终于在不断地尝试后,连接上了远程数据库,开始了数据冒险之旅。


VioletJack
931 声望161 粉丝

专注于Vue前端开发的学习和分享