我试图弄清楚应该在使用sequalize作为ORM的node js应用程序中在哪里写查询。
例如,我有一个模型地址,我这样写数据:
let adr = await Address.create({street, number, city, state, country})
我应该在获取数据的控制器中还是在模型中编写此代码,然后将其(例如完整的对象地址)传递给模型的方法?最佳做法是什么?
我认为最好在模型中编写它,因为我可以在许多控制器中使用相同的代码。但是也许还有其他一些限制。
实际上,您应该使用repository
。背后的想法是制作一个模块,该模块将提取数据库,将其作为依赖项注入,然后在控制器中使用存储库,这是一个简短的示例。
// 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
你只改变库而不是整个应用程序或控制器。
因此,一个好的做法是使用存储库,sequelize
因为也存在一种执行此操作的方法。
var db = require('../models');
var UsersRepository = {
findByEmail: function(email) {
return db.User.findAll({
where: {
email: email
}
})
}
}
module.exports = UsersRepository;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句