【问题标题】:ExpressJS Redirect to Get Function Once Finished完成后 ExpressJS 重定向以获取函数
【发布时间】: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 的结果,您的控制器期望接收完整的有效负载。控制器中的逻辑更少

标签: node.js express seneca


【解决方案1】:

如果是 Express,您可以使用 .all() 代替 .get() 和 .post()。

通常,您也可以将该代码放在单独的模块中。 我会切换到 async/await 并使用其他新的 JS 功能来让你的代码更干净。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    相关资源
    最近更新 更多