【问题标题】:How to implement active MVC model in Sequelize如何在 Sequelize 中实现主动 MVC 模型
【发布时间】:2018-12-21 01:13:15
【问题描述】:

我正在开发 NodeJS + Sequelize 应用程序。现在我的所有逻辑都在控制器中,但有人告诉我这是错误的方式(Fat Stupid Ugly Controllers)。这是我的控制器文件:

const Deals = require('../models').deals;

module.exports = {
  createDeal: (req, res, next) => {
    const { description, category, open_time, close_time, property_id } = req.body;
    return Deals
    .create({ description, category, open_time, close_time, property_id })
    .then(deal => res.status(200).json({ status: 'Created one property', deal }))
    .catch(error => console.log(error));
  },

  getAllDeals: (req, res, next) => {
    return Deals
    .findAll({paranoid: false})
    .then(deals => res.status(200).json({ status: 'Retrieved all deals', deals }))
    .catch(error => console.log(error));
  },

  getSingleDeal: (req, res, next) => {
    const { id } = req.params;
    return Deals
    .findById(id)
    .then(deal => res.status(200).json({ status: 'Retrieved one deal', deal }))
    .catch(error => console.log(error));
  },

  updateDeal: (req, res, next) => {
    const { id } = req.params;
    const { description, category, open_time, close_time } = req.body;
    return Deals
    .findById(id)
    .then(deal => {
      if (!deal) {
        return res.status(404).send({ message: 'Deal not found' })
      }
      return deal
      .update({
        description: description,
        category: category,
        open_time: open_time,
        close_time: close_time
      })
      .then(deal => res.status(200).json({ status: 'Updated one deal', deal }))
      .catch(error => console.log(error));
    })
    .catch(error => console.log(error));
  },

  destroyDeal: (req, res, next) => {
    const { id } = req.params;
    return Deals
    .findById(id)
    .then(deal => {
      if (!deal) {
        return res.status(404).send({ message: 'Deal not found' })
      }
      return deal
      .destroy()
      .then(() =>  res.status(200).json({ status: 'Deleted one deal', deal }))
      .catch(error => console.log(error));
    })
  }
}

这是我拥有的模型文件:

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Deals = sequelize.define('deals', {
    description: {
      allowNull: false,
      type: DataTypes.STRING
    },
    category: {
      allowNull: false,
      type: DataTypes.STRING
    },
    open_time: {
      allowNull: false,
      type: DataTypes.STRING
    },
    close_time: {
      allowNull: false,
      type: DataTypes.STRING
    },
    property_id: {
      allowNull: false,
      type: DataTypes.INTEGER
    }
  }, {
    timestamps: true,
    paranoid: true
  });
  Deals.associate = function(models) {
    // associations can be defined here
    Deals.belongsTo(models.properties, {
      foreignKey: 'property_id',
      onDelete: 'CASCADE'
    })
  };
  return Deals;
};

所以,有人告诉我,我的 updateDeal() 方法是错误的,因为它向模型或数据库发出多个请求,而它应该只是“获取和分析来自用户的请求并选择下一步(就像将它发送到系统的其他元素一样)”。所以,我应该将控制器中的所有逻辑带到我的模型函数中。我希望有人解释它是如何工作的或一些代码示例。

【问题讨论】:

    标签: node.js postgresql model-view-controller sequelize.js


    【解决方案1】:

    我能够改变它。这是来自我的控制器:

    updateDeal: (req, res, next) => {
        const { id } = req.params;
        return Deals
          .updateById(id, req.body)
          .then(deal => res.status(200).json({ status: 'Updated one deal', deal }))
          .catch(error => {
            return res.status(400).send({message: error.message})
          });
      }
    

    这是来自模型:

    Deals.updateById = function(id, data){
        return Deals
          .findById(id)
          .then(deal => {
            if (!deal) {
              throw Error('Deal Not Found')
            }
            return deal
            .update(data, {fields: Object.keys(data)})
          })
    
      }
      return Deals;
    

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 2016-01-01
      • 2017-10-08
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多