从ASP.MVC中基于AOP的身份验证到nodeJS

Coming from AOP based authentication in ASP.MVC to nodeJS

本文关键字:身份验证 nodeJS AOP ASP MVC      更新时间:2023-09-26

当我在.net世界中使用MVC时,这是一种常见的模式,当我想处理交叉问题(如日志记录、身份验证、事务管理等)时,我会使用DI和AOP来基本上为我的方法添加需要代理/编织的属性。

所以它可能看起来像:

public class SomeController
{
   [Authenticate]
   public ActionResult SomeAuthenticatedAction() {}
   public ActionResult NotAuthenticatedAction() {}
}

因此,考虑到上面的情况,当调用SomeAuthenticatedAction时,它会检查授权cookie的请求,并对此进行一些逻辑处理,然后用401之类的东西轰炸用户。它知道要这样做,因为它有一个属性,在运行时它知道要挂接并代理。

现在我在javascript领域,正在考虑获得同样的功能,但要以适合该平台的最佳方式来实现。因此,我想知道我应该如何在nodejs中实现这一点,因为javascript中没有任何属性范式,所以如果不将身份验证输入到我不喜欢的每个app.* (get,post etc)调用中,或者在应用程序入口点代理中,我知道的每个操作都需要进行身份验证,这也不理想。

那么,有没有一种方法可以让我指出,方法应该应用一些跨领域的关注点,而不需要实际将逻辑放在其中?这样一来,web代码就不知道身份验证机制,应用程序入口点也不知道具体的方法,它只知道想要所有带有元数据的方法?

我希望这是有意义的,因为如果你不太使用AOP,你可能会认为我在说谜语,但这样做可以让我的代码更容易测试和维护,也可以让我很快重新配置应用程序。

到目前为止,我已经找到了Hooker,它可以完成谜题的代理部分,尽管我不太确定如何在其中获得底层请求对象,但我不认为在JS中代理对象太痛苦,但我只需要找到一种方法来识别要拦截的方法。。。任何信息都会很棒。

===编辑===

在阅读了更多内容后,我应该使用中间件层来做我需要做的事情,因为这至少会允许更简单的代码,并且路由的意图会更清晰。一旦我发现更多或更好的答案出现,我会一直看着回来。

由于没有答案,我将提到我所做的事情,即创建一个包含需要在路由上执行的逻辑的类,然后创建一个导出为中间件入口点的函数。这样,我就可以对逻辑进行单元测试,并使用中间件将"关注点"注入到该路由中。