1

当我在 .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 中的对象代理太痛苦了,但是我只需要找到一种方法来识别拦截方法......任何信息都会很棒。

== 编辑 ==

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

4

1 回答 1

0

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

于 2013-08-08T12:56:21.287 回答