常见问题 (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:
- 检查浏览器控制台是否有 CSRF 校验失败 (403) 的报错。
- 确保你的 Layout 中引入了必要的交互脚本(如 HTMX)。
-
确保你定义的 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 证书。