ExpressJS中间件与逻辑

时间:2017-03-02 12:24:04

标签: node.js express routing structure middleware

在ExpressJS API中构建逻辑的最佳方法是什么。

所以我想说我想创建一个注册和登录功能,并且假设我希望用户在成功注册后登录。 现在有不同的方法可以实现这一点,我的问题基本上是:哪种方法最好,为什么?

<方法1

一切都是中间件:

router.post('/path', someMiddleware, register, login, function(req, res){
    //You are registered and logged in.
});

因此,寄存器和登录都被视为中间件,两者都以调用next()结束。这也导致了最佳的可重用性,因为我可以在任何其他快速路由中再次登录和/或注册。

<方法2

注册是中间件并调用login(现在只是一个标准函数):

router.post('/path', someMiddleware, register, function(req, res){
    //You are registered and logged in.
});

所以这里寄存器仍然是中间件,但是在调用next()之前它调用login(),在这种情况下它不是中间件。这里的问题是,如果已经注册的用户想要登录,我是否应该创建一个混合登录功能,它也是中间件,只是在特定的帖子请求中调用它?

<方法3

逻辑不在中间件中并在包装器中调用:

router.post('/path', someMiddleware, funcWrapper(register, login), function(req, res){
    //You are registered and logged in.
});

然后(伪):

funcWrapper(actions...){
    foreach actions
        action()
}

这里逻辑和中间件是分开的,有一个包装器循环遍历所有作为参数传递的函数(在这种情况下是寄存器和登录)

只是最后一个问题:

如果我没有提出足够的问题,我会有最后一个问题。使用

结束所有快速路由呼叫是否更好?
..., function(req, res){
    //response
});

..., lastMiddleware);

然后在lastMiddleware中有一些响应

0 个答案:

没有答案