Node.js ORM 框架 sequelize 实践
2016-09-25 15:39
621 查看
最近在做团队的一个内部系统,这次使用的nodejs web框架是团队统一的hapi.js,而数据库依然是mysql,ORM 框架选用有着6000+ stars 的 sequelize.js,
hapi-sequelize插件对sequelize做了很简单的封装,可以让我们很自如地在hapi中游走,比如配置和调用。
初始化 sequelize
// server.js const Hapi = require('hapi'); const server = new Hapi.Server(); //注册到 hapi server server.register( [ { register: require('hapi-sequelize'), options: { database: '', user: '', pass: '', dialect: 'mysql', port: 3306, models: 'Models/**/*.js', sequelize: { define: { underscoredAll: true } } } }, ], (err) => { if (err) { console.error('failed to load plugin'); } } );
定义数据模型
// Models/user.js function userModel(sequelize, DataTypes) { var User = sequelize.define('User', { user_name: { //定义User表中的每一个字段 type: DataTypes.STRING, //字段数据类型 allowNull: false //是否允许为空 }, user_level: { type: DataTypes.INTEGER, allowNull: false }, user_proj: { type: DataTypes.STRING } }); return User; } module.exports = userModel;
同步模型到数据库
// server.js server.plugins['hapi-sequelize'] .db.sequelize.sync().then(function () { console.log('models synced'); }); //sync方法如果配置{force: true}时,如果数据库是否有该表,如果有则会删除表,再重建。
使用模型
经过配置后,我们可以在路由handler中使用这个实例:
// Route/index.js function index(req, res) { var models = req.server.plugins['hapi-sequelize'].db.sequelize.models; models.User.find({...}).then({...}); } module.exports = { method: 'GET', path: '/', handler: index }];
新增一条记录
models.User.create({ user_name: 'John', user_level: 9 }).then((data) => { //... });
查询记录
var user = models.User.findOne({ //... }).then((data) => { //... }); 这是一个异步过程,sequelize 内部使用了 bluebird 对异步流程控制。变量user得到的是 Promise 对象,并非查询结果。
删除记录
models.User.destroy({ where: { id: 1 } }).then(function(rowDeleted) { if(rowDeleted === 0){ console.log('成功删除记录'); } }, function(err){ console.log(err); }); //软删除操作: // models.User.destroy({where: {id: userId}}, {force: false}); // 恢复软删除,使用 restore 方法 http://sequelize.readthedocs.org/en/latest/api/instance
多表查询
要实现用户权限管理的RBAC模型,那需使用到多表查询,其实就是数据库中的association://1:1 // user model var user = sequelize.define('User', {/*attribute*/}); User.hasOne(userInfo); // userInfo model var userInfo = sequelize.define('userInfo', {/*attribute*/}); userInfo.belongsTo(User); // 查 var userInfo = yield user.getUserInfo();
自定义SQL
当业务较复杂时,sequelize 有可能无法满足你的需求,你可以编写自己的SQL语句:var sequelize = req.server.plugins['hapi-sequelize'].db.sequelize; sequelize.query('SELECT * ...');
参考资料
http://docs.sequelizejs.com/相关文章推荐
- Node.js ORM 框架 sequelize 实践
- NODE.JS ORM之sequelize 框架
- NODE.JS ORM之sequelize 框架
- 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查
- NODEJS ORM sequelizejs 常见用法
- ORM DB for nodejs--sequelize
- [转] 虚拟研讨会:Node.js生态系统之框架、库、最佳实践
- 虚拟研讨会:Node.js生态系统之框架、库、最佳实践
- Node.js实践
- 用Node.js 写web框架(三)
- 用Node.js 写web框架(四)
- 轻量级web框架node.js和bottle
- Node.js实践
- Nodejs+express+angularjs+mongodb搭建前端项目框架NJBlog
- node测试框架:mocha+should.js
- Nodejs+express+angularjs+mongodb搭建前端项目框架NJBlog
- node.js express框架文件上传路径
- node.js web应用基本框架
- 深入浅出node.js游戏服务器开发——基础架构与框架介绍
- 用Node.js 写web框架(五点五)