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

Flask后端对接Node.js前端时出现ReferenceError: document is not defined

问题描述

我正在开发一个前端基于Node.js、后端基于Flask的程序。

前端代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <meta
      name="description"
      content="Web site created using create-react-app"
    />
    <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
  
    <title>PreFab Davao</title>

    <script src="https://code.jquery.com/jquery-3.6.1.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
  </body>
</html>

后端接口代码

@DBretriever.route('/getProjectDetails/<project_id>', methods = ['GET'])
def get_Project_Details(project_id): #gets project details from project ID
    project_Details = []
    found_Project = projects_collection.find_one({"project_id": project_id})

    if found_Project == None:
        print("Error Code: e0102db; Project ID  Not Found")
        return "e0102db"
    else:
        found_id = projects_collection.find_one({"project_id": project_id}, {"project_id": 1, "_id" : 0})
        project_id = found_id['project_id']
        project_Details.append(project_id)
        
        found_name = projects_collection.find_one({"project_id": project_id}, {"project_name": 1, "_id" : 0})
        project_name = found_name['project_name']
        project_Details.append(project_name) 

        found_status = projects_collection.find_one({"project_id": project_id}, {"project_status": 1, "_id" : 0})
        project_status = found_status['project_status']
        project_Details.append(project_status) 

        found_tasks = projects_collection.find_one({"project_id": project_id}, {"tasks": 1, "_id" : 0})
        tasks = found_tasks['tasks']
        project_Details.append(tasks) 

        return project_Details

前端调用的JS文件代码

function getProjectDetails(){

    const script = document.createElement("script");
script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js';
script.type = 'text/javascript'

    $.ajax({
        url:"/getProjectDetails/<project_id",
        type: "GET",
        dataType: "json",
        success: function(data){
            console.log(data)
        }

    });
}

getProjectDetails();

调用getProjectDetails()时出现ReferenceError: document is not defined错误,请问问题出在哪?


问题解决

1. 核心错误原因

document是浏览器环境特有的对象,这个错误说明你的JS代码在Node.js环境中执行了,而非浏览器端——Node.js没有document,所以触发报错。

修复步骤:

  • 确保JS文件在浏览器环境加载执行:比如在React组件中通过useEffect钩子在组件挂载后调用,或者将JS文件通过<script>标签引入到HTML的<body>末尾(确保DOM加载完成)。
  • 删掉重复引入jQuery的代码:你已经在HTML里引入了jQuery 3.6.1,JS文件里再创建script标签引入3.6.0完全多余,直接移除这段代码:
    const script = document.createElement("script");
    script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js';
    script.type = 'text/javascript'
    

2. 其他需要修正的问题

  • URL路径错误:url:"/getProjectDetails/<project_id"里的<project_id>是占位符,需要替换为实际的项目ID值,比如/getProjectDetails/123,否则请求会发送到错误地址。
  • 后端返回格式不统一:当前后端查询失败时返回字符串"e0102db",但成功时返回数组,前端指定dataType: "json"会解析失败。建议后端统一返回JSON格式,同时优化数据库查询(无需多次调用find_one):
    from flask import jsonify
    
    @DBretriever.route('/getProjectDetails/<project_id>', methods = ['GET'])
    def get_Project_Details(project_id):
        found_Project = projects_collection.find_one({"project_id": project_id})
    
        if not found_Project:
            print("Error Code: e0102db; Project ID  Not Found")
            return jsonify({"error": "e0102db", "message": "Project ID Not Found"}), 404
        else:
            project_details = {
                "project_id": found_Project["project_id"],
                "project_name": found_Project["project_name"],
                "project_status": found_Project["project_status"],
                "tasks": found_Project["tasks"]
            }
            return jsonify(project_details)
    
  • React环境建议:如果是Create React App项目,更推荐使用内置的fetch或axios发送请求,而非jQuery,更符合React开发习惯。示例:
    async function getProjectDetails(projectId) {
      try {
        const response = await fetch(`/getProjectDetails/${projectId}`);
        if (!response.ok) {
          const errorData = await response.json();
          throw new Error(errorData.message || '请求失败');
        }
        const data = await response.json();
        console.log(data);
        return data;
      } catch (error) {
        console.error(error);
      }
    }
    
    // 在React组件中调用示例
    // useEffect(() => {
    //   getProjectDetails('实际项目ID');
    // }, []);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:25:20