eggjs对象关系映射ORM实践 - sequelize

我就是个NODEJS初学者,

eggjs本来有简单的数据库查询egg-mysql插件,

配置和使用起来也很简单,但是有很大权限,配置不了数据库对应关系。

比如后台存储的字段是下划线规范写法,前端接口需要的是驼峰写法。

当然修改其一使其对应也是可以的。但是我懒得改了,因为前端是我以前写的项目COPY过来的,后端以前是JAVA,我要给他全部改成NODEJS,然后就想到了如果能把字段全部转成驼峰写法就可以实现了,但是貌似egg-mysql转换不了。

然后我百度了一下转换的方法,原来这种功能有个学名叫ORM对象关系映射。

NODEJS实现ORM貌似现在只有sequelize这一插件。

1,安装

npm install --save egg-sequelize mysql2

 2,启用插件( 在 config/plugin.js 中引入 egg-sequelize 插件)

// config/plugin.js
module.exports = {
  jwt: {
    enable: true,
    package: 'egg-jwt',
  },
  cors: {
    enable: true,
    package: 'egg-cors',
  },
  sequelize: {
    enable: true,
    package: 'egg-sequelize',
  },
};

 3,配置数据库信息(在 config/config.default.js 中添加 sequelize 配置)

// config/config.default.js  
config.sequelize = {
    dialect: 'mysql',
    host: 'localhost',
    port: 3306,
    database: 'ips',
    username: 'root',
    password: '',
    define: {
      freezeTableName: true,
      underscored: true,
      timestamps: false,
      createdAt: 'create_time',
      updatedAt: 'update_time',
    },
};

 4,建立数据模型model

// /app/model/user.js

'use strict';
module.exports = app => {
  const DataTypes = app.Sequelize;
  return app.model.define(
    'user',
    {
      id: {
        type: DataTypes.STRING(64),
        allowNull: false,
        primaryKey: true,
        field: 'id',
      },
      name: {
        type: DataTypes.STRING(64),
        allowNull: false,
        field: 'name',
      },
      loginName: {
        type: DataTypes.STRING(64),
        allowNull: false,
        unique: true,
        field: 'login_name',
      },
    },
    {
      tableName: 'user',
    }
  );
};

 这步很麻烦,如果很多字段,而且很多表,会把人累死,可以使用自动化工具 sequelize-auto 来自动生成模型文件,详情见

5,调用model操作数据库,可以在controller或者sevice中做

// /app/controller/user.js
'use strict';
const Controller = require('egg').Controller;
class UserController extends Controller {
  async index() {
    const { ctx } = this;
    // 查询
    const user = await ctx.model.User.findOne({ where: { loginName: 'admin' } })
    ctx.body = user;
  }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值