如何为同一路径调用不同的控制器功能?

时间:2019-01-11 12:34:37

标签: javascript node.js express

我为提交贷款申请定义了一条路线,我要做的就是根据用户申请的贷款额调用不同的控制器功能。

app.use('/submitLoanRequest50kMore', mw1, mw2, mw3, loan50kLess)

app.use('/submitLoanRequest50kMore', mw1, mw2, mw3, loan50kMore)

我想要的是端点是相同的,并且我基于中间件的onw调用控制器功能(loan50kLess或loan50kMore)

app.use('/submitLoanRequest', mw1, mw2, mw3, mw4, .....) // could be loan50kLess() or loan50kMore()

我知道可以通过在最后一个函数中编写逻辑或路由转发来完成此操作,但是此内容也可以嵌套到多个级别,例如如果贷款金额大于50k,则可以添加其他中间件。

请让我知道是否可以在节点中执行此操作,无需表达。

如果需要澄清,也请告诉我。 It's called a rule engine or workflow engine in java

1 个答案:

答案 0 :(得分:0)

您可以使用快速middleware来实现这种行为。 (also
如我所见,您已经在使用中间件,因此要添加新的中间件,您必须创建如下功能:

// function accepts three params. request, response and next. 
const loan50kLess = (req, res, next) => {
  //assume you have load parameter somewhere in request param.
  // example logic would be this

  if(req.params.loan > 50000) { 
    return res.status(200).json({message: 'Load is more then 50k'}) 
 }
 // If load is less then 50k, or any other middleware param, you have just call next() to pass execution to the next stage.
 next()
}

然后在您的路由中,您可以将其用作另一个中间件:

app.use('/submitLoanRequest50kMore', mw1, mw2, mw3, loan50kMore);

但是请注意,如果在这种情况下贷款少于5万,则必须向中间件添加逻辑,或者在调用中添加下一个函数以处理这种情况。
像这样:

app.use('/submitLoanRequest50kMore', mw1, mw2, mw3, loan50kMore, (req, res) => {
  ...some logic if loan is less then 50k
})