You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elixir控制器Delete方法删记录后返回500错误(204状态码异常)

问题原因与解决方案

问题根源

HTTP 204(No Content)状态码的核心要求是响应不能包含任何内容体,但你的代码在设置204状态后调用了render("deleted.json"),这会生成JSON响应体,违反了204的规范,从而触发服务器内部错误。

修正代码

直接移除render/2调用,因为204响应不需要返回任何内容:

def delete(conn, %{"id" => id}) do
  user = conn.assigns.current_user
  book = Books.get_book!(id)

  with  true           <- book.user_id == user.id,
        {:ok, %Book{}} <- Books.delete_book(book) do
          conn
          |> put_status(:no_content)
  end
end

Phoenix在设置204状态后,直接返回conn即可,框架会自动处理无内容的响应逻辑。

补充说明

如果需要给客户端返回删除成功的提示信息(比如你原本的deleted.json内容),应该使用200 OK状态码,而非204 No Content——因为204的规范明确禁止携带任何响应体。

内容的提问来源于stack exchange,提问作者Mateusz Babski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:25:30