编程语言
首页 > 编程语言> > Javascript-我应该在哪里在模型或控制器中编写查询(序列化)?

Javascript-我应该在哪里在模型或控制器中编写查询(序列化)?

作者:互联网

我试图弄清楚应该在使用sequalize作为ORM的节点js应用程序中写查询的位置.

例如,我有一个模型地址,我这样写数据:

let adr = await Address.create({street, number, city, state, country})

我应该在获取数据的控制器中还是在模型中编写此代码,然后将其(例如完整的对象地址)传递给模型的方法?最佳做法是什么?

我认为最好在模型中编写它,因为我可以在许多控制器中使用相同的代码.但是也许还有其他一些限制.

解决方法:

实际上,您应该使用存储库.背后的想法是创建一个模块,该模块将提取数据库,将其作为依赖项注入,然后在控制器中使用存储库,这是一个简短的示例.

// repository.js

module.exports = (db) => {
   const findUserById = (id) => {
        // db query your user by id
   }

   const createUser = (data) {
       // db insert a new user
   }

   // ... other repository functions to deal with the database

   return Object.create({
     findUserById,
     createUser,
     // ...
   })
} 

然后,在控制器中,您将通过提供适当的数据库连接来使用存储库.

const repository = require('./repository.js')(dbConnection);

app.get('/users/:id', (req, res) => {
   repository.findUserById(req.params.id);
   // ...
})

这样,您可以通过模拟数据库轻松测试代码,甚至可以使用良好的值进行测试.然后,您抽象了数据库连接和其他重要功能,例如,当您需要将数据库从mysql更改为mongodb时,仅更改存储库,而不更改整个应用程序或控制器.

因此,一个好的做法是使用存储库进行序列化,也存在一种实现方法.

var db = require('../models');

var UsersRepository = {
    findByEmail: function(email) {
        return db.User.findAll({
            where: {
                email: email
            }
        })
    }
}

module.exports = UsersRepository;

标签:sequelize-js,node-js,orm,javascript
来源: https://codeday.me/bug/20191025/1930997.html