常见问题 (FAQ)

1. 路由与访问

Q: 为什么我新建的文件没有生效?

A: 请确保文件位于 src/pages/src/api/ 目录下,并且后缀名为 .ex。在开发模式下,Nex 会自动扫描新文件,但如果遇到编译错误,路由可能无法注册。请检查终端输出。

Q: 动态路由 [id].ex 和静态路由 new.ex 冲突怎么办?

A: Nex 会优先匹配静态路径。访问 /users/new 会匹配 new.ex,而访问 /users/123 会匹配 [id].ex

2. 交互与响应

Q: 为什么我的 hx-post 按钮点击没反应?

A:

  1. 检查浏览器控制台是否有 CSRF 校验失败 (403) 的报错。
  2. 确保你的 Layout 中引入了必要的交互脚本(如 HTMX)。
  3. 确保你定义的 Action 函数名与路径名完全一致(如 hx-post="/add" 对应 def add(_params))。

Q: 响应返回了,但页面没有更新?

A: 检查 hx-target 是否指向了正确的 ID。如果 Action 返回的是 :empty,页面确实不会发生任何 DOM 变化。

3. 状态管理 (Nex.Store)

Q: 为什么刷新页面后我的购物车变空了?

A: 这是 Nex.Store 的设计初衷。状态是绑定在 page_id 上的,全页刷新会生成新的 ID。如果你需要持久化存储,请使用数据库。

Q: Nex.Store 会导致内存溢出吗?

A: 不会。Nex 内置了 TTL(生存时间)清理机制,默认状态在 1 小时后会自动清理。此外,后台进程每 5 分钟会进行一次全量扫描。

4. 部署与环境

Q: 生产环境如何设置密钥?

A: 设置环境变量 SECRET_KEY_BASE。你可以使用 mix phx.gen.secret 生成一个足够长的随机字符串。

Q: 支持 HTTPS 吗?

A: Nex 本身专注于 Web 逻辑。在生产环境中,我们建议在 Nex 前面挂一个 Nginx 或 Caddy 处理 SSL/TLS 证书。