在ExpressJS API中构建逻辑的最佳方法是什么。
所以我想说我想创建一个注册和登录功能,并且假设我希望用户在成功注册后登录。 现在有不同的方法可以实现这一点,我的问题基本上是:哪种方法最好,为什么?
<方法1一切都是中间件:
router.post('/path', someMiddleware, register, login, function(req, res){
//You are registered and logged in.
});
因此,寄存器和登录都被视为中间件,两者都以调用next()
结束。这也导致了最佳的可重用性,因为我可以在任何其他快速路由中再次登录和/或注册。
注册是中间件并调用login(现在只是一个标准函数):
router.post('/path', someMiddleware, register, function(req, res){
//You are registered and logged in.
});
所以这里寄存器仍然是中间件,但是在调用next()
之前它调用login()
,在这种情况下它不是中间件。这里的问题是,如果已经注册的用户想要登录,我是否应该创建一个混合登录功能,它也是中间件,只是在特定的帖子请求中调用它?
逻辑不在中间件中并在包装器中调用:
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中有一些响应