Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点项目中的关注点分离_Node.js - Fatal编程技术网

Node.js 节点项目中的关注点分离

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

在我的应用程序中,我有一个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();

这真的取决于你!如果您认为您在其他地方需要它,那么将它放在一个库中,否则您可以将它留在原来的位置,并在需要时进行重构

当我第一次开始使用这些东西的时候,我常常会挂断东西应该放在哪里,但是在看了很多其他代码之后,我意识到在js中有很多方法可以实现这些东西

就我个人而言,我尽量直截了当,这样维护我的代码的人(包括我)就不必担心代码的模糊性,也不必拥有粒子物理学的学位来理解代码


一个简洁,另一个复杂:)

类倾向于将我们置于一个强制封装的隧道中,这在像JS这样的语言中并不总是必要的。如果没有要管理的状态,那么一定要让它尽可能接近纯函数。这是一个好问题。为了做出决定,我会问自己“我是否需要
UserService
类之外的
generateAuthToken
”,我可能会说不需要,因此将其包括在本模块中是合适的。