【发布时间】:2017-03-30 00:50:35
【问题描述】:
我想找到一种不重复自己的方法。
我的大多数 /post/ 命令应该更新一些内容,然后显示与 /get/ 命令相同的内容。
目前我正在重复自己:
.get(function(req, res) {
act({
role: 'earnings',
cmd: 'get',
wc: req.params.wc,
earner_id: req.params.earner_id,
})
.then(function(earnings) {
return act({
role: 'earnings',
cmd: 'format',
earnings: earnings,
date: true,
time: true,
note: true,
total: true
})
})
.then(function(formatted_earnings) {
if (formatted_earnings.length > 0)
res.render( 'earnings-wc-earner', {
formatted_earnings: formatted_earnings
})
else
res.render('error', {
message: "No earnings found."
})
})
.catch(function (err) {
res.send(err);
})
})
.post(function(req, res) {
act({
role: 'earnings',
cmd: 'add',
wc: req.body.wc,
earner_id: req.body.earner_id,
datetime: req.body.datetime,
earnings: req.body.earnings
})
.then(function(earnings) {
return act({
role: 'earnings',
cmd: 'get',
wc: req.params.wc,
earner_id: req.params.earner_id,
})
.then(function(earnings) {
// would love to redirect to get right about now
// especially with a success message
return act({
role: 'earnings',
cmd: 'format',
earnings: earnings,
date: true,
time: true,
note: true,
total: true
})
})
.then(function(formatted_earnings) {
if (formatted_earnings.length > 0)
res.render( 'earnings-wc-earner', {
message: "Successfully added manual payment.",
formatted_earnings: formatted_earnings
})
else
res.render('error', {
message: "No earnings found."
})
})
.catch(function (err) {
res.send(err);
})
})
我是否可以做一些类似重定向的事情来进入第一个 .then 链的 post 函数?
【问题讨论】:
-
在同一个文件中编码所有内容?如何将您的应用程序拆分为一个已建立的结构,例如类似 Rails 的 MVC。这将允许您重用模型方法并保持干燥
-
不,我将其拆分为模块。这是路由文件之一。
-
不过,您的流程逻辑包含在您的控制器(路由处理程序)中,而控制器方法的主体应该只包括输入/输出格式和对模型的调用。
-
所以如果我进一步抽象出这些功能,即我将流逻辑放入一个单独的模块中会起作用吗?
-
例如,如果您创建一个实现
create方法和find方法的模型,您可以将它们链接在那里。作为create的结果,您的控制器期望接收完整的有效负载。控制器中的逻辑更少