mac 安装mysql详细教程
下载最新的mysql版本
-
安装
mysql
,需要注意的是,现在安装的时候,可以直接设置密码。选第二个Use Legacy Password
,来设置密码
安装
Navicat Premium
客户端,然后连接mysql
。上面本人设置的密码是123456
。所以这部密码直接输入。创建数据库,这边创建了一个
minipro
来做测试。
搭建egg脚手架
egg官方文档
egg-Sequelize文档
创建一个简单的egg骨架
npm init egg --type=simple
- 添加egg-sequelize组件到项目中
npm install --save egg-sequelize mysql2
- 在
config/plugin.js
底下添加代码。记得要把默认的export删了。整个文件如下。
exports.sequelize = {
enable: true,
package: 'egg-sequelize',
};
- 在
config.default.js
添加代码配置。这边还可以拓展很多,比如支持中文和emoji表情等。
// 添加mysql的ORM
config.sequelize = {
dialect: 'mysql', // support: mysql, mariadb, postgres, mssql
database: 'minipro', //数据库名
host: '127.0.0.1',
port: '3306',
username: 'root', //账号
password: '123456', //密码
};
- 在
model
文件夹底下创建user.js
添加如下代码。这些与数据库的表一一对应。也是所谓的ORM。
'use strict';
module.exports = app => {
const { STRING, INTEGER } = app.Sequelize;
// 创建USER表
const User = app.model.define('user', {
open_id: { type:STRING, allowNull: false },
nick_name: { type: STRING },
avatar_url: { type: STRING },
gender: { type: INTEGER },
province: { type: STRING },
city: { type: STRING },
country: { type: STRING },
});
return User;
}
- 在
service
文件夹底下创建user.js
添加如下代码。service
就是主要来做数据的增删改查的工作。
'use strict'
const Service = require('egg').Service;
class UserService extends Service {
constructor(ctx) {
super(ctx);
// 将用户的模型赋值在全局
this.model = ctx.model.User;
}
/**
* 查询单条
*/
async findOne(option) {
const result = await this.model.findOne(option).then(res => {
return res ? res.toJSON() : res;
});
return result;
}
async saveUserInfo(data) {
console.log('this.model.upsert');
await this.model.upsert({
nick_name: 'radish2',
avatar_url: '',
gender: 1,
province: 'fuck',
city:'fuck',
country:'fuck',
open_id: 'qwer'
});
const user = await this.findOne({
where: {
open_id: 'qwer'
}
});
return user;
}
}
module.exports = UserService;
- 在
controller
文件夹底下创建user.js
添加如下代码。
'use strict'
const Controller = require('egg').Controller;
class UserController extends Controller {
// async getUserInfoById() {
// }
async saveUserInfo() {
const { ctx } = this;
const { nick_name, avatar_url, gender, province, city, country, open_id } = ctx.request.body;
const result = await ctx.service.user.saveUserInfo({
nick_name, avatar_url, gender, province, city, country, open_id
});
ctx.status = 200;
ctx.body = {
success: true,
result,
};
}
}
module.exports = UserController;
- 在
router.js
添加如下代码。
'use strict';
/**
* @param {Egg.Application} app - egg application
*/
module.exports = app => {
const { router, controller } = app;
router.post('/user/saveUserInfo', controller.user.saveUserInfo);
};
- 在根目录下创建
app.js
文件。添加如下代码,写入该方法会自动创建表。
module.exports = app => {
app.beforeStart(async () => {
// 写入该方法会自动创建表
await app.model.sync();
});
};
- 启动项目,就可以看到数据库的表都创建成功了。
2020-05-21 15:08:04,327 INFO 5869 [egg-sequelize](24ms) Executed (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER NOT NULL auto_increment , `open_id` VARCHAR(255) NOT NULL, `nick_name` VARCHAR(255), `avatar_url` VARCHAR(255), `gender` INTEGER, `province` VARCHAR(255), `city` VARCHAR(255), `country` VARCHAR(255), `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
2020-05-21 15:08:04,329 INFO 5869 [egg-sequelize](26ms) Executed (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER NOT NULL auto_increment , `open_id` VARCHAR(255) NOT NULL, `nick_name` VARCHAR(255), `avatar_url` VARCHAR(255), `gender` INTEGER, `province` VARCHAR(255), `city` VARCHAR(255), `country` VARCHAR(255), `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
2020-05-21 15:08:04,333 INFO 5869 [egg-sequelize](3ms) Executed (default): SHOW INDEX FROM `users` FROM `minipro`
2020-05-21 15:08:04,334 INFO 5869 [egg-sequelize](4ms) Executed (default): SHOW INDEX FROM `users` FROM `minipro`
2020-05-21 15:08:04,342 INFO 5865 [master] egg started on http://127.0.0.1:7001 (1819ms)