【发布时间】:2021-11-15 03:06:03
【问题描述】:
我想提高我在 Node JS 方面的技能。现在我对如何清晰地分离应用程序的服务层和路由器层感兴趣,这样我就可以避免代码重复之类的事情。
以用户方案的create method为例。
在UserService.Js 中,我为此存储了以下方法:
function createUser(req, res, next) {
let user = new User({
userID: req.body.userID,
userName: req.body.userName,
password: req.body.password,
isAdministrator: req.body.isAdministrator
});
user.save().then(function() {
res.send(user);
}).catch(err => {
console.log(err);
});
}
以下代码存储在UserRouter.Js:
router.post('/publicUser', userService.createUser)
代码有效,但关注点分离没有得到尊重。 如何现在用回调函数编写创建函数?
我的尝试如下所示:
UserService.js
function createUser() {
let user = new User
return user;
}
UserRoute.js
router.post('/publicUser',function(req,res,next){
let newOne=userService.createUser()
newOne.userID=req.body.userID
newOne.userName=req.body.userName
newOne.password=req.body.password
newOne.isAdministrator=req.body.isAdministrator
newOne.save().then(function() {
res.send(newOne);
}).catch(err => {
console.log(err);
})})
它有效。但是是否存在更优雅的方式?
【问题讨论】:
-
你想解决什么问题?
-
这个想法是使用关注点分离的原则将业务逻辑从node.js API Routes中移开。所以我不想将 req 或 res 对象传递给服务层。
-
好的,所以只需将您当前拥有的所有内容放在
createUser作为router.post的回调,然后将user.save()“业务逻辑”部分移动到一个单独的函数中。不要使用额外的回调。让它返回承诺。 -
好的,那么这个例子会是什么样子?
-
就像我描述的那样?请edit你的问题表明你的尝试,或者详细说明你卡在哪里
标签: javascript express callback separation-of-concerns