我最近开始使用nodejs,因为我认为我将在工作中转移到一个新项目(我通常是一名Java程序员)。
我正在做一个休息服务api。 到目前为止,我已经有了一个路由模块来定义我的端点,然后调用一个控制器函数来持久保存我的对象,然后返回响应。
我想将我的持久性逻辑委托给服务模块,以使其远离我的控制器。对于我更复杂的情况,这绝对是必要的。
我正在努力寻找如何成功重构我的代码以使用服务。到目前为止,我还没有成功调用一个服务方法,从我的控制器返回一个值,然后再渲染它。
我将提供正在运行的原始模块,然后尝试将逻辑拉入返回值的服务模块:
路由/ index.js
const UserController = require('../controllers/userController');
const ProfileController = require('../controllers/profileController');
module.exports = (app) => {
app.get('/api', (req, res) => res.status(200).send({
message: 'Welcome to the Todos API!',
}));
app.get('/api/users', UserController.list);
app.post('/api/users', UserController.create);
app.get('/api/users/1/profile', function() {
console.log('got profile for user 1');
});
app.post('/api/users/1/profile', ProfileController.create);
};

模型/ user.js的
'use strict';
module.exports = (sequelize, DataTypes) => {
var User = sequelize.define('User', {
username: DataTypes.STRING,
password: DataTypes.STRING,
email: DataTypes.STRING,
}, {
classMethods: {
associate: function(models) {
// associations can be defined here
}
}
});
return User;
};

原始(工作)controllers / userController.js
const User = require('../models').User;
module.exports = {
create(req, res) {
return User
.create({
username: req.body.username,
password: req.body.password,
email: req.body.email,
})
.then(user => res.status(201).send(user))
.catch(error => res.status(400).send(error));
},
list(req, res) {
return User
.all()
.then(users => res.status(200).send(users))
.catch(error => res.status(400).send("couldnt get list: " + error));
},
};

现在我尝试重构并将持久性代码提取到服务中:
modified controllers / userController.js
const UserService = require('../services/userService');
module.exports = {
create(req, res) {
return Promise.resolve(UserService.create)
.then(user => res.status(201).send(user))
.catch(error => res.status(400).send(error));
},
list(req, res) {
return User
.all()
.then(users => res.status(200).send(users))
.catch(error => res.status(400).send("couldnt get list: " + error));
},
};

新服务/ userService.js
const User = require('../models').User;
module.exports = {
create(req, res) {
return User
.create({
username: req.body.username,
password: req.body.password,
email: req.body.email,
})
},
list(req, res) {
return User
.all()
},
};

我很确定我的问题是我对回调和承诺如何运作缺乏了解。
任何帮助和/或建议都会受到欢迎。 我正在努力为我的工作重新开始做好准备。
提前致谢!