提问者:小点点

组件之间如何交互?


我正在使用express和组件方法编写一个项目。 我的文件结构如下:

components
 user
   index.js
   userModel.js
   userRouter.js
 auth
   index.js
   authRouter.js
   authController.js

据我理解,我的组件不应该直接链接,也就是说,为了在授权时检查是否有现有用户而在AuthController.js文件中连接一个用户组件将是错误的。

AuthController.js:

const passport = require('passport')
const VKontakteStrategy = require('passport-vkontakte').Strategy;
const config = require('config')

passport.use(new VKontakteStrategy({
    clientID:     config.get('auth.vk.clientID'),
    clientSecret: config.get('auth.vk.clientSecret'),
    callbackURL:  `${config.get('domain')}/api/web/auth/vkontakte/callback`
  },
  function(accessToken, refreshToken, params, profile, done) {
      console.log(profile)
    User.findOrCreate({ vkontakteId: profile.id }, function (err, user) {
      return done(err, user);
    });
  }
));

module.exports = passport

问题是,在这种情况下,如何连接这两个组件?


共1个答案

匿名用户

这里有一个很好的MVC层。 MVC的“问题”在于它没有解决逻辑和将逻辑放在哪里(这是一件好事,因为这种设计模式应该根据您的逻辑进行调整,而不是相反)。

我建议添加一个业务逻辑层(在components目录旁边)。

business_logic 
 user
  userService.js    // <--- Expose a well defined API for user
  userRepository.js // <--- DB stuff
components
 user
   index.js
   userModel.js
   userRouter.js
 auth
   index.js
   authRouter.js
   authController.js

现在,如果UserService.js公开了以下方法:

 - create(user)
 - delete(userId)
 - update(userId, user)
 - getById(userId)
 - getAll(query)
 - getByAuth(username, password)

您可以对authController.js使用getByAuth(用户名,密码),通过其余方法,您可以在UserController.js中实现CRUD API。