我正在使用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
问题是,在这种情况下,如何连接这两个组件?
这里有一个很好的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。