Chicago Boss 框架控制器开发指南

Chicago Boss 框架控制器开发指南

控制器基础概念

Chicago Boss 是一个基于 Erlang 的 Web 框架,采用 MVC 架构模式。控制器作为核心组件,负责处理 HTTP 请求并返回响应。在 Chicago Boss 中,每个 URL 都会映射到控制器模块的特定函数。

控制器模块结构

控制器模块需要放置在项目的 src/controller/ 目录下,命名格式为 应用名_控制器名_controller.erl。例如,一个博客应用的控制器可以命名为 blog_post_controller.erl

控制器模块声明有两种形式:

-module(appname_my_controller, [Req]).

或者当启用会话功能时:

-module(appname_my_controller, [Req, SessionID]).

控制器函数设计

控制器函数通常接受 2-3 个参数:

  1. HTTP 请求方法(原子类型),如 'GET''POST'
  2. URL 路径中的令牌列表(以斜杠分隔的部分)
  3. 可选的 before_ 函数返回结果

路由匹配示例

% GET /blog/view
view('GET', []) ->
    ...;
    
% GET /blog/view/1234
view('GET', [Id]) ->
    ...;
    
% GET /blog/view/tag/funny
view('GET', ["tag", Tag]) ->
    ...;

在视图中生成对应 URL 的模板标签:

{{ '{% url action="view" %}' }}
{{ '{% url action="view" id="1234" %}' }}
{{ '{% url action="view" tag="funny" %}' }}

高级路由配置

除了控制器中的模式匹配,还可以在 priv/应用名.routes 文件中定义额外路由规则:

{"/", [{controller, "main"}, {action, "welcome"}]}.
{"/signup", [{application, "login"}, {controller, "account"}, {action, "create"}]}.
{404, [{controller, "main"}, {action, "not_found"}]}.

路由支持正则表达式匹配:

{"/([0-9]+)", [{controller, "coupon"}, {action, "redeem"}, {coupon_id, '$1'}]}.

授权控制

通过 before_/3 函数实现前置授权检查:

before_(Action, Method, Tokens) ->
    my_user_lib:require_login(Req).

before_ 函数可以返回:

  • {ok, ExtraInfo} - 继续执行并将额外信息传递给动作
  • {redirect, Location} - 重定向到指定位置

控制器返回值

控制器动作可以返回多种类型的响应:

  1. 基本响应

    ok
    {ok, Variables}
    {ok, Variables, Headers}
    
  2. JavaScript 响应

    js
    {js, Variables}
    {js, Variables, Headers}
    
  3. 重定向

    {redirect, Location}
    {moved, Location}  % 301 永久重定向
    
  4. JSON 响应

    {json, Data}
    {jsonp, Callback, Data}
    
  5. 流式响应

    {stream, Generator, Acc0}
    
  6. 错误响应

    not_found
    {StatusCode, Body, Headers}
    

缓存策略

Chicago Boss 提供了灵活的缓存机制:

  1. 在配置中启用缓存并设置缓存服务器
  2. 定义 cache_ 函数指定缓存策略:
cache_("index", []) ->
    {page, [{seconds, 30}]};
cache_("profile", [ProfileId]) ->
    {vars, [{seconds, 300}, {watch, ProfileId ++ ".*"}]};
cache_(_, _) ->
    none.

缓存选项:

  • seconds - 缓存时间(秒)
  • watch - 监听的记录主题,当相关记录变更时自动失效缓存

多语言支持

框架内置多语言支持,可以通过以下方式控制语言:

  1. 在控制器动作返回的头部中指定:

    {ok, Variables, [{"Content-Language", "zh-CN"}]}
    
  2. 定义 lang_ 函数返回首选语言

最佳实践建议

  1. 保持控制器精简,将业务逻辑放在 src/lib/ 目录下的辅助模块中
  2. 合理使用缓存提高性能,但注意缓存粒度
  3. 利用模式匹配简化路由处理
  4. 为需要权限的控制器动作添加 before_ 检查
  5. 考虑多语言支持时,统一管理语言资源文件

通过掌握这些控制器开发技巧,您可以充分利用 Chicago Boss 框架构建高效、可扩展的 Web 应用。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭蔷意Ward

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值