我就是个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;
}