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

Flask后端GET请求返回JSON遇500错误,需实现IoT灯状态实时更新

Flask GET请求返回JSON解决500错误方案

核心问题排查

500是服务器内部错误,先启动Flask debug模式(app.run(debug=True))查看控制台的详细报错信息,以下是最常见的几个问题及解决方法:

1. 未使用jsonify包装响应

Flask不能直接返回Python字典,必须用flask.jsonify生成标准JSON响应,否则会触发500错误。

错误示例:

@app.route('/light/status')
def get_light_status():
    return {"status": "on"}  # 直接返回字典会报错

修正代码:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/light/status', methods=['GET'])
def get_light_status():
    # 模拟从硬件/数据库获取灯状态的逻辑
    light_data = {
        "status": "on",
        "brightness": 75,
        "color": "white"
    }
    # 用jsonify包装后返回
    return jsonify(light_data)

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)  # 内网部署用0.0.0.0,debug模式看报错

2. 业务逻辑抛出未捕获异常

如果获取灯状态的代码(比如读取硬件、数据库)出错,会直接触发500错误,需要添加异常捕获:

@app.route('/light/status', methods=['GET'])
def get_light_status():
    try:
        # 替换成你的实际硬件读取逻辑
        light_data = read_light_hardware_status()
        return jsonify({"success": True, "data": light_data})
    except Exception as e:
        # 返回错误信息,方便前端排查
        return jsonify({"success": False, "error": str(e)}), 500

3. 路由未明确指定GET方法

虽然Flask默认路由支持GET,但显式指定methods=['GET']可以避免后续添加POST接口时的冲突。


前端AJAX实时更新示例

XMLHttpRequest原生写法

<div>当前灯状态:<span id="light-status">加载中...</span></div>

<script>
function refreshLightStatus() {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', '/light/status', true);
    xhr.onload = function() {
        if (xhr.status >= 200 && xhr.status < 400) {
            const res = JSON.parse(xhr.responseText);
            // 更新页面显示
            document.getElementById('light-status').textContent = res.status;
        } else {
            console.error('请求失败,状态码:', xhr.status);
        }
    };
    xhr.onerror = function() {
        console.error('网络请求出错');
    };
    xhr.send();
}

// 每3秒刷新一次状态
setInterval(refreshLightStatus, 3000);
</script>

调试技巧

  1. 直接在浏览器地址栏访问http://你的内网IP:端口/light/status,确认后端能正常返回JSON,排除前端问题。
  2. 打开浏览器开发者工具(F12)的Network标签,查看GET请求的响应内容,服务器返回的错误信息会直接显示在这里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:05:22