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

Godot引擎对接Laravel后端:Server Sent Error处理问题

问题描述

在Godot引擎中使用HTTPRequest类向Laravel后端发起HTTP请求,请求可正常执行,但无法获取后端返回的错误信息。例如提交必填name和password的表单时,若仅传入email,后端会返回“password is required”的错误,但在Godot中只能拿到响应状态码,打印响应体得到的是HTML文档,尝试解析JSON返回null。当前实现代码如下:

func _http_request_completed(result, response_code, _headers, body):
    var data = body.get_string_from_utf8().strip_edges()
    if result != HTTPRequest.RESULT_SUCCESS:
        push_error("An error occurred in the HTTP request.")

    if response_code >= 400:
        print(data) ## this prints an HTML document
        var json = JSON.parse_string(data)
        print("json format error", json) ## this prints <null>
        print("request error with response code: ", response_code) ## getting the response code
        return

    var json = JSON.parse_string(data)
    if json:
        request_completed_with_data.emit(json)

请问如何获取后端发送的错误信息?此外,Godot引擎是否有其他API调用的实现方式?


解决方案

一、获取Laravel后端的错误信息

你拿到HTML文档是因为Laravel在返回4xx错误时,默认会渲染错误页面而非JSON响应。可以从以下两个方向解决:

1. 调整请求头让后端返回JSON

发起请求时,添加Accept: application/json请求头,明确告诉后端你期望JSON格式的响应。Laravel会自动识别这个头,返回JSON错误而非HTML页面。

2. 修改Godot请求与解析逻辑

先在发起请求时配置正确的请求头,再调整响应解析代码:

# 发起请求的代码示例
var request = HTTPRequest.new()
add_child(request)
# 添加指定响应格式的请求头
var headers = ["Accept: application/json", "Content-Type: application/json"]
request.request("你的后端API地址", headers, true, HTTPClient.METHOD_POST, '{"email": "test@example.com"}')

修改响应处理函数:

func _http_request_completed(result, response_code, _headers, body):
    var data = body.get_string_from_utf8().strip_edges()
    if result != HTTPRequest.RESULT_SUCCESS:
        push_error("HTTP请求出错")
        return

    var json = JSON.parse_string(data)
    if json == null:
        print("响应格式错误: ", data)
        return

    if response_code >= 400:
        # Laravel返回的JSON错误通常包含message和errors字段
        print("后端错误提示: ", json["message"])
        print("详细错误列表: ", json["errors"])
        return

    request_completed_with_data.emit(json)

如果后端没有自动适配请求头,也可以修改Laravel的异常处理器,让API路由统一返回JSON错误(比如在app/Exceptions/Handler.php的render方法中判断请求来源,返回JSON格式响应)。

二、Godot其他API调用方式

除了HTTPRequest,还有以下几种实现方式:

  • HTTPClient类:更底层的HTTP工具,可手动控制连接、请求发送、响应接收的全流程,适合需要高度自定义的场景。
  • 社区第三方插件:比如RestClient类插件,封装了REST API的常见操作,简化请求流程。
  • Godot 4.2+的Fetch API:语法更简洁的现代化API,支持异步/await写法:
    func _ready():
        var response = await fetch("你的后端API地址", {
            "method": "POST",
            "headers": {"Accept": "application/json", "Content-Type": "application/json"},
            "body": JSON.stringify({"email": "test@example.com"})
        })
        if response.ok:
            var data = await response.json()
            request_completed_with_data.emit(data)
        else:
            var error_data = await response.json()
            print("错误信息: ", error_data["message"])
    

内容的提问来源于stack exchange,提问作者Alif Haider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:05:33