无法将值从服务返回到控制器以在node.js中进行渲染

时间:2017-12-10 17:03:47

标签: javascript node.js design-patterns callback promise

我最近开始使用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()
  },
};




我很确定我的问题是我对回调和承诺如何运作缺乏了解。

任何帮助和/或建议都会受到欢迎。 我正在努力为我的工作重新开始做好准备。

提前致谢!

0 个答案:

没有答案