NodeJs + koa2 + sequelize-auto + sequelize 搭建项目
1、使用脚手架初始化koa项目
1.1 下载脚手架 (cmd命令行)
npm install -g koa-generator
1.2 在当前路径,使用koa-generator生成koa2项目(cmd命令行)
koa2 koa-test-sequelize-auto
1.3 进入koa-test-sequelize-auto目录(如果没有下载yarn的话,请全局下载yarn。 命令行: npm install -g yarn)
yarn install
1.4 启动项目
npm run dev
1.5 通过浏览器查看是否启动成功
浏览器输入localhost:3000,若出现以下内容,则初始化koa项目成功
2、建立mysql数据库,并创建一些假数据
2.1 通过navicat工具,新建一个test数据库
2.2 在test数据库里执行下面这一段sql语句
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for member -- ---------------------------- DROP TABLE IF EXISTS `member`; CREATE TABLE `member` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `sex` tinyint(4) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=17 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of member -- ---------------------------- INSERT INTO `member` VALUES ('1', 'jacson', '0'); INSERT INTO `member` VALUES ('2', 'jacson', '0'); INSERT INTO `member` VALUES ('3', 'jacson', '0'); INSERT INTO `member` VALUES ('4', 'jacson', '0'); INSERT INTO `member` VALUES ('5', 'jacson', '0'); INSERT INTO `member` VALUES ('6', 'jacson', '0'); INSERT INTO `member` VALUES ('7', 'jacson', '0'); INSERT INTO `member` VALUES ('8', 'jacson', '0'); INSERT INTO `member` VALUES ('9', 'jacson', '0'); INSERT INTO `member` VALUES ('10', 'jacson', '0'); INSERT INTO `member` VALUES ('11', 'jacson', '0'); INSERT INTO `member` VALUES ('12', 'jacson', '0'); INSERT INTO `member` VALUES ('13', 'jacson', '0'); INSERT INTO `member` VALUES ('14', 'jacson', '0'); INSERT INTO `member` VALUES ('15', 'jacson', '0'); INSERT INTO `member` VALUES ('16', 'jacson', '0'); -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) unsigned zerofill NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('00000000001', '你好', '15'); INSERT INTO `user` VALUES ('00000000002', '我不好', '16'); INSERT INTO `user` VALUES ('00000000003', '他好', '17');
3、建立orm库,并使用
3.1 在当前项目中安装下面这几个依赖(cmd命令行)
yarn add sequelize yarn add sequelize-auto yarn add mysql yarn add mysql2
3.2 在当前目录下,新建一个auto.js文件(记住,自己替换database、user、password、port这几个mysql的参数)
auto.js文件内容如下所示
const SequelizeAuto = require('sequelize-auto') const auto = new SequelizeAuto( 'database', //数据库的库名 'user', //mysql数据库的用户名 'password', //mysql数据库的密码 { host: '127.0.0.1', // 数据库服务器ip dialect: 'mysql', directory: './models', // prevents the program from writing to disk port: '3306', // 数据库运行端口 additional: { timestamps: false } } ) auto.run(function (err) { if (err) throw err; // console.log(auto.tables); // table list // console.log(auto.foreignKeys); // foreign key list //生成models表后,直接执行项目 require('./bin/www'); });
3.3 在package.json里scripts里添加一行配置
"auto": "node auto",
3.4 执行下面的命令行, 生成models模型(在当前目录下会出现models文件,这些就是模型,如下图所示。)
npm run auto
3.5 在当前目录下,新建一个tool文件夹,文件夹内新建一个db.js文件
db.js文件内容如下所示
const Sequelize = require('sequelize'); const fs = require("fs"); const path = require("path"); const basePathG = path.join(__dirname, '../models'); let models = fs.readdirSync(basePathG); dbInit(); async function dbInit() { let sequelize = await new Sequelize( 'database', //数据库的库名 'user', //mysql数据库的用户名 'password', //mysql数据库的密码 { 'dialect': 'mysql', // 数据库使用mysql 'host': '127.0.0.1', // 数据库服务器ip 'port': '3306', // 数据库运行端口 'timestamp': false, // 这个参数为true是MySQL会自动给每条数据添加createdAt和updateAt字段 'quoteIdentifiers': true } ); models.forEach((item, index) => { let name = item.substr(0, item.length - 3); name = name.substring(0, 1).toUpperCase() + name.substring(1) //首字母大写 module.exports[name] = require(basePathG + `/${item}`)(sequelize, Sequelize.DataTypes) }); }
3.6 到这里,我们就可以随便引用db了。然后可以肆无忌惮的使用orm库里的方法了
3.7 通过url地址访问,查看我们的最终成果
本项目所有代码皆上传至github。github地址:点我
注:皆因sequelize-auto的网上教程有点少,故踩了不少坑,所以,自己写了一个。