【发布时间】: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