koa中使用sequelize

柔情只为你懂 2022-12-10 01:16 408阅读 0赞

文章目录

      • 一.安装sequelize
      • 二.建立连接
      • 三.创建数据模型
      • 四.模型与数据库同步
      • 五.增删改查

sequelize是nodejs最常用的orm框架,类似于java中的JPA,无需写sql语句。

参考资料

Sequelize 中文文档整理(v5版本)
Sequelize API Reference

一.安装sequelize

  1. npm install --save sequelize
  2. #除了安装sequelize还要安装所使用的的数据库驱动模块
  3. npm install --save mysql2

二.建立连接

db/seq.js

  1. /** * @description:sequelize实例 */
  2. const Sequelize = require('sequelize')
  3. //运行环境
  4. const {
  5. isProd,
  6. isTest
  7. } = {
  8. isProd: process.env.NODE_ENV=== 'production',
  9. isTest: process.env.NODE_ENV === 'test',
  10. }
  11. //mysql配置信息
  12. const {
  13. host,
  14. user,
  15. password,
  16. database
  17. } = {
  18. host: 'localhost',
  19. port: '3306',
  20. user: 'root',
  21. password: '123456',
  22. database: 'test' //数据库需要自己手动建立
  23. }
  24. config = {
  25. host: host,
  26. dialect: 'mysql',
  27. }
  28. if (isTest) {
  29. //测试环境不用打印sql语句
  30. config.logging = () => { }
  31. }
  32. if (isProd) {
  33. //线上环境使用连接池
  34. config.pool = {
  35. max: 5,
  36. min: 0,
  37. idle: 10000
  38. }
  39. }
  40. const sequelize = new Sequelize(database, user, password, config)
  41. sequelize.authenticate().then((result) => {
  42. console.log('connect success')
  43. }).catch((err) => {
  44. console.log('connect error')
  45. });
  46. module.exports = sequelize

三.创建数据模型

db/model/User.js

  1. /** * @description 用户数据模型 */
  2. const seq = require('../seq')
  3. // users
  4. const User = seq.define('user', {
  5. userName: {
  6. type: Sequlize.STRING,
  7. allowNull: false, //是否允许为空
  8. unique: true, //是否是唯一索引
  9. comment: '用户名,唯一'
  10. },
  11. password: {
  12. type: Sequlize.STRING,
  13. allowNull: false,
  14. comment: '密码'
  15. },
  16. }, {
  17. timestamps: true, //默认为true,自动生成`createdAt`和`updatedAt`字段
  18. freezeTableName: false //默认为false,表名自动是使用复数形式,如user->users
  19. })
  20. module.exports = User

db/model/Blog.js

  1. /** * 微博数据模型 */
  2. const seq = require('../seq')
  3. const Blog = seq.define('blog', {
  4. userId: {
  5. type: Sequelize.INTEGER,
  6. allowNull: false,
  7. comment: '用户 ID'
  8. },
  9. content: {
  10. type: Sequelize.TEXT,
  11. allowNull: false,
  12. comment: '微博内容'
  13. },
  14. })
  15. module.exports = Blog

db/model/index.js

  1. /** * @description:数据模型入口文件 */
  2. const User = require('./User')
  3. const Blog = require('./Blog')
  4. //可以在此文件中建立外键关联关系
  5. //User一对多Blog Blog-->User
  6. Blog.belongsTo(User, {
  7. foreignKey: 'userId'
  8. })
  9. // User->Blog
  10. // User.hasMany(Blog)
  11. module.exports = {
  12. User,
  13. Blog,
  14. }

四.模型与数据库同步

db/sync.js

  1. const sequelize = require('./seq')
  2. require('./model/index')
  3. sequelize.sync({
  4. force: true //如果表已经存在,则删除表后再创建
  5. }).then((result) => {
  6. console.log('db async ok')
  7. process.exit()
  8. }).catch((err) => {
  9. console.log('db async error')
  10. console.log(err)
  11. });

手动创建test数据库后,在项目中执行下面命令,即可自动建表

  1. node src/db/sync.js

五.增删改查

service/user.js

  1. //增加用户
  2. async function createUser({
  3. userName,
  4. password,
  5. }) {
  6. const result = await User.create({
  7. userName,
  8. password,
  9. })
  10. const data = result.dataValues
  11. return data
  12. }
  13. //删除用户
  14. async function deleteUser(userName) {
  15. const result = await User.destroy({
  16. where: {
  17. userName
  18. }
  19. })
  20. //返回删除的行数
  21. return result > 0
  22. }
  23. //修改用户
  24. async function updateUser({
  25. newPassword,
  26. }, {
  27. userName,
  28. password
  29. }) {
  30. //拼接修改内容
  31. const updateData = { }
  32. if (newPassword) {
  33. updateData.password = newPassword
  34. }
  35. //拼接查询条件
  36. const whereData = {
  37. userName
  38. }
  39. if (password) {
  40. whereData.password = password
  41. }
  42. //执行修改
  43. const result = await User.update(updateData, {
  44. where: whereData
  45. })
  46. return result[0] > 0 //修改的行数
  47. }
  48. //查询用户
  49. async function getUserInfo(userName, password) {
  50. //拼接查询条件
  51. let whereOpt = {
  52. userName
  53. }
  54. if (password) {
  55. Object.assign(whereOpt, {
  56. password
  57. })
  58. }
  59. const result = await User.findOne({
  60. attributes: ['id', 'userName'],
  61. where: whereOpt
  62. })
  63. if (result == null) {
  64. return result
  65. }
  66. return result.dataValues
  67. }

发表评论

表情:
评论列表 (有 0 条评论,408人围观)

还没有评论,来说两句吧...

相关阅读

    相关 sequelize-cli的使用

    sequelize-cli用于支持数据迁移和项目引导。通过迁移,可以将现有数据库迁移到另一个状态,反之亦然:这些迁移文件会被保存在迁移文件中,迁移文件描述了怎样到达新状态以及如