jjw

写给自己的博客。 记录学习的点滴以备查。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

mormot2 笔记(二) Http服务的简单搭建

Posted on 2023-08-17 10:23  jjw  阅读(464)  评论(0编辑  收藏  举报

mormot2框架中有个THttpServer类,它有一个Router属性,定义如下:

  property Router: TUriRouter read fRoute; 

Router是添加路由的入口点,它有和http协议对应的get, post, put, delete等方法,这些方法可以添加路由,下面常用的get方法定义。

    procedure Get(const aUri: RawUtf8; const aExecute: TOnHttpServerRequest); overload;
  TOnHttpServerRequest = function(Ctxt: THttpServerRequestAbstract): cardinal of object;

这里我们不能像js中koa2类似的写法,除非我们写个helper类,给TUriRouter加个方法,然后就可以像koa2中的写法一样了,类似这样:

HttpServer.Router.getEx('/api/login', function(ctx, TXXXContext): Integer
begin
   //代码
end;

如果不想使用上面的方式写代码,我们可以按delphi WebModule的方式写,即写不同的TWebAction,  我们先定义TAbstractRoute抽象类,然后写不同的子类,代码类似这样:

TAbstractRout = class
protected
  FPreFix: string;  //路由前缀,很有必要, 以后/api2/login时,这里变动就行了。
FUrl: string;
FMethodType: string;
public procedure Execute(ctx: TXXXContext); virtual; abstract; end; TLoginRoute = class(TAbstractRout) public procedure Execute(ctx: TXXXContext); overide; end;

这样就能适配TUriRouter.Get方法了。

此外,我们也可以使用“贴标签”的方式来定义路由,即使用TCustomAttribute,这样就和JAVA等框架中的写法一样了,看个人的喜好吧。