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
相关产品推荐
相关产品推荐

