节点项目中的关注点分离

时间:2019-05-03 13:34:42

标签: node.js

在我的应用程序中,我有这个userService类。在这里,我创建了generateAuthToken方法。把它放在服务中是个好主意吗?还是我应该与服务分开,并将其作为util函数包含到util文件中?

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();

1 个答案:

答案 0 :(得分:1)

这完全取决于您!如果您认为在其他地方需要它,则将其粘贴到库中,否则可以将其保留在原处,并在需要时进行重构。

当我刚开始使用这些东西时,我曾经迷住了东西应该去哪里,但是在看了很多其他代码之后,我意识到有很多方法可以在js中实现东西。

我个人会尽量做到直截了当,以便那些不得不维护我的代码(包括我在内)的人们不必担心晦涩难懂或对粒子物理学有一定的了解。

一个人的简洁就是另一个人的复杂:)