javascript - 我在 NodeJS 中正确使用了存储库模式吗?
问题描述
我使用 Sequelize 来处理数据库。
在我的项目中,我遇到了代码重复,并决定研究存储库设计模式,它将数据库的工作和数据输出与业务逻辑分开。研究了网上的资料后,我决定整理资料,向更有经验的程序员查询。我正确使用存储库模式?控制器/user.controller.js
const userService = require('../services/user.service');
exports.userCreate = async (req, res, next) => {
try {
const user = await userService.userCreate(req.body);
return res.status(201).json(user);
} catch (e) {
return next(e);
}
}
服务/user.service.js
const ApiError = require('../utils/error');
const userRepo = require('../repositories/user.repository');
exports.userCreate = async (data) => {
if (!data) throw ApiError.badRequest('Bad');
const { login } = data;
if (!login) throw ApiError.badRequest('Bad');
const password = 'hash';
const user = await userRepo.userCreate({login, password});
return user;
}
存储库/user.repository.js
const User = require('../models/User');
exports.userCreate = async (data) => {
const { login, passowrd } = data;
const user = await User.create({login, password});
return {
login: user.login,
}
}
模型/User.js
const { sequelize, Sequelize } = require('../config/db');
const User = sequelize.define('users', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
allowNull: false,
primaryKey: true,
},
login: {
type: Sequelize.STRING,
allowNull: false,
},
password: {
type: Sequelize.STRING,
allowNull: false,
}
});
module.exports = User;
解决方案
您的用户模型很好,但服务的结构似乎有点奇怪。如果 userCreates 的所有三个功能都在单独的文件中,我建议您将它们组合起来并将服务重命名为 Controller,因为服务通常在客户端使用。
服务/user.service.js
const User = require('../models/User')
// const userRepo = require('../repositories/user.repository') Not sure what this does
const ApiError = require('../utils/error')
module.exports = {
async createUser (req, res) {
try {
if (!req.body) throw ApiError.badRequest('Bad')
const { login } = req.body
if (!login) throw ApiError.badRequest('Bad')
const password = 'hash'
const user = await User.create({ login, password })
res.stauts(201).json(user.login)
} catch (err) {
console.log(err)
res.staus(500).send({
error: err
})
// return next(err)
}
}
}
推荐阅读
- python - 不再支持 Xlsx 文件。设置新 BW2 项目的解决方案?
- docker - 在创建时将配置文件传递给 docker 容器而不使用 bind-mout
- asp.net-mvc - ASP.NET Core MVC 中的搜索功能问题
- javascript - 我们如何在reactjs中可点击的表格行中获取或集成url
- c++ - 多点触控旋转QT问题
- python - 迭代和数据集长度出错。并且 data_time_interval 太大。如何解决这些问题?
- javascript - Javascript/JQuery 回调混淆
- elasticsearch - 使用 json 数据弹性更新字段
- python - 匹配 csv 中给定的输入并返回匹配的最大输入数的行
- c++ - 将向量数组转换为数字