功能梳理完了以后,咱们就可以开始数据库表设计了:

数据库表图:

首先打开Navicat Premium 创建数据库 blog

配置如下:

在blogNodejs/models 下

首先新建 mysql.js 进行mysql连接配置(基于Sequelize)

var config = require('config-lite');//引入灵活配置文件var Sequelize = require('sequelize');.//引入Sequelizevar Mysql = new Sequelize(config.mysql.database, config.mysql.user, config.mysql.password, {    host: config.mysql.host, //数据库服务器ip    dialect: 'mysql', //数据库使用mysql    port: 3306, //数据库服务器端口    pool: {        max: 5,        min: 0,        idle: 10000    },});module.exports = Mysql;

然后根据数据库图,依次创建对应的Model

这里以user.js为示例 单独说下:

/** * User 用户表 */var Sequelize = require('sequelize');//引入sequelizevar Mysql = require('./mysql');//引入mysql实例化//定义User用户表var User = Mysql.define('user', {    uuid: {//使用uuid 而不使用        type: Sequelize.UUID,//设置类型        allowNull: false,//是否允许为空        primaryKey: true,//主键        defaultValue: Sequelize.UUIDV1,//默认值    }, //uuid    email: { //邮箱        type: Sequelize.STRING,        allowNull: false,        unique: true, //唯一        validate: {//设置验证条件            isEmail: true,// 检测邮箱格式 (foo@bar.com)        },    },    password: { //密码        type: Sequelize.STRING,        allowNull: false,    },    state: { //状态 0未激活邮箱、1已激活邮箱        type: Sequelize.STRING(2),//限制字符个数        defaultValue: "0", //默认值    },}, {    freezeTableName: true, //开启自定义表名    tableName: 'User',//表名字    timestamps: true, // 添加时间戳属性 (updatedAt, createdAt)    createdAt: 'createDate',// 将createdAt字段改个名    updatedAt: 'updateDate',// 将updatedAt字段改个名    indexes: [{ // 索引        type: 'UNIQUE', //UNIQUE、 FULLTEXT 或 SPATIAL之一        method: 'BTREE', //BTREE 或 HASH        unique: true, //唯一 //设置索引是否唯一,设置后会自动触发UNIQUE设置//true:索引列的所有值都只能出现一次,即必须唯一        fields: ['uuid'], //建立索引的字段数组。每个字段可以是一个字段名,sequelize 对象 (如 sequelize.fn),或一个包含:attribute (字段名)、length (创建前缀字符数)、order (列排序方向)、collate (较验的字段集合 (排序))    }],    comment:"User Table",//数据库表描述});module.exports = User;//导出

表都写完后,新建index.js

** * 数据库表关系建立 */var Mysql = require('./mysql');//表var AdminUser = require('./adminUser');//管理员表var User = require('./user');//用户表var UserInfo = require('./userInfo');//用户信息表var Article = require('./article');//文章表var Category = require('./category');//文章类别表var Attachment = require('./attachment');//文章附件表/** * 关系建立 *///用户-用户资料User.hasOne(UserInfo); //1:1//用户-文章User.hasMany(Article); //1:NArticle.belongsTo(User); //1:1//文章-分类 (定义中间表ArticleCategory 实现多对多)Article.belongsToMany(Category,{through: 'ArticleCategory'}); //N:NCategory.belongsToMany(Article,{through: 'ArticleCategory'}); //N:N//文章-附件Article.hasMany(Attachment); //1:NAttachment.belongsTo(Article); //1:1//基于sequelize自动创建表//【!!注意 首次执行完请注释掉该段代码 !!】Mysql.sync({    force: true,//是否清空数据库表}).then(function() {    console.log('ok');});module.exports = {    AdminUser: AdminUser,    User: User,    UserInfo: UserInfo,    Article: Article,    Category: Category,    Attachment: Attachment,};

好。到这里,咱们咱们打开

blogNodejs/app.js 写入以下代码

/** * 主入口启动文件 * add by wwj * 2017-08-24 15:01:48 */var express = require('express'); //web 框架var logger = require('morgan'); //开发模式下logvar bodyParser = require('body-parser'); //jsonvar path = require('path'); //路径var config = require('config-lite'); //读取配置文件var winston = require('winston'); //日志var expressWinston = require('express-winston'); //基于 winston 的用于 express 的日志中间件var models = require('./models'); //临时添加 为了生成数据库表,后面写到Controllers里面//实例化expressvar app = express();// 设置模板目录app.set('views', path.join(__dirname, 'views'));// 设置模板引擎为 ejsapp.set('view engine', 'ejs');// logapp.use(logger('dev'));//设置json//格式化JSON的输出app.set('json spaces', 2);// parse application/x-www-form-urlencodedapp.use(bodyParser.urlencoded({  extended: false}));// parse application/jsonapp.use(bodyParser.json());// 设置静态文件目录app.use(express.static(path.join(__dirname, 'public'))); //注意:中间件的加载顺序很重要。如上面设置静态文件目录的中间件应该放到 routes(app) 之前加载,这样静态文件的请求就不会落到业务逻辑的路由里;//错误请求的日志app.use(expressWinston.errorLogger({  transports: [    new winston.transports.Console({      json: true,      colorize: true    }),    new winston.transports.File({      filename: 'logs/error.log'    })  ]}));// error handlerapp.use(function(err, req, res, next) {  // set locals, only providing error in development  res.locals.message = err.message;  res.locals.error = req.app.get('env') === 'development' ? err : {};  // render the error page  res.status(err.status || 500);  res.render('error');});//appmodule.exports = app;

执行一下

npm run dev

然后去mysql 下看看是否创建成功了(右击“表”-刷新)

到这里,咱们的数据库已经ok啦, 下面开始进行后端路由设计啦

参考阅读:
1、Sequelize 中文API文档https://itbilu.com/nodejs/npm...
2、Sequelize 和 MySQL 对照https://segmentfault.com/a/11...
3、使用Sequelizehttp://www.liaoxuefeng.com/wi...
4、Sequelize API https://sequelize.readthedocs...