Node.js 节点项目中的关注点分离
在我的应用程序中,我有一个userService类。这里我创建了generateAuthToken方法。把它投入服务是个好主意吗?或者我应该从服务中分离出来,并将其作为一个util函数包含到util文件中Node.js 节点项目中的关注点分离,node.js,Node.js,在我的应用程序中,我有一个userService类。这里我创建了generateAuthToken方法。把它投入服务是个好主意吗?或者我应该从服务中分离出来,并将其作为一个util函数包含到util文件中 import jwt from 'jsonwebtoken'; import config from 'config'; import bcrypt from 'bcrypt'; import _ from 'lodash'; import { User } from '../mod
import jwt from 'jsonwebtoken';
import config from 'config';
import bcrypt from 'bcrypt';
import _ from 'lodash';
import { User } from '../models/user';
import { userRepository } from '../repositories/userRepository';
class UserService {
generateAuthToken(user) {
const token = jwt.sign({ _id: user._id, isAdmin: user.isAdmin }, config.get('jwtPrivateKey'));
return token;
}
/**
* Create new user
*/
async createNewUser(userDTO) {
let user = await userRepository.getUserByEmail(userDTO.email);
if (user)
throw new Error('Email already exists');
user = new User(_.pick(userDTO, ['name', 'email', 'password']));
const salt = await bcrypt.genSalt(10);
user.password = await bcrypt.hash(user.password, salt);
userRepository.saveUser(user);
return user;
}
/**
* Login user
*/
async loginUser(userDTO) {
let user = await userRepository.getUserByEmail(userDTO.email);
if (!user)
throw new Error('Invalid email or password');
const validPassword = await bcrypt.compare(userDTO.password, user.password);
if (!validPassword)
throw new Error('Invalid email or password');
return user;
}
async getCurrentUser() {
}
}
export const userService = new UserService();
这真的取决于你!如果您认为您在其他地方需要它,那么将它放在一个库中,否则您可以将它留在原来的位置,并在需要时进行重构 当我第一次开始使用这些东西的时候,我常常会挂断东西应该放在哪里,但是在看了很多其他代码之后,我意识到在js中有很多方法可以实现这些东西 就我个人而言,我尽量直截了当,这样维护我的代码的人(包括我)就不必担心代码的模糊性,也不必拥有粒子物理学的学位来理解代码
一个简洁,另一个复杂:)类倾向于将我们置于一个强制封装的隧道中,这在像JS这样的语言中并不总是必要的。如果没有要管理的状态,那么一定要让它尽可能接近纯函数。这是一个好问题。为了做出决定,我会问自己“我是否需要
UserService
类之外的generateAuthToken
”,我可能会说不需要,因此将其包括在本模块中是合适的。