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

基于LocalStorage变量查询MongoDB时出现内部服务器错误的解决方法

解决LocalStorage中idCode无法传递到后端查询MongoDB的问题

问题根源

LocalStorage是浏览器端存储机制,后端Node.js代码无法直接读取该数据。你之前手动指定idCode能正常运行,是因为直接提供了合法查询值;未传递idCode时,后端查询条件无效,再加上代码中变量名与模型名重复(result变量覆盖了导入的模型),最终引发500内部错误。

解决方案步骤

1. 前端传递idCode到后端

前端获取LocalStorage中的idCode后,通过URL查询参数传递给后端接口:

const idCode = localStorage.getItem("idCode");
// 跳转到结果页时携带idCode参数,处理特殊字符避免URL解析错误
if (idCode) {
    window.location.href = `/result?idCode=${encodeURIComponent(idCode)}`;
} else {
    alert("未找到idCode,请先完成前置操作");
}

2. 后端修改控制器代码

修改controller/results.js,从请求查询参数中获取idCode,同时修复变量名冲突问题:

const mongoose = require("mongoose");
const Result = require("../models/result"); // 重命名模型变量,避免与查询结果冲突

exports.getResultPage = async (req, res) => {
    try {
        // 从URL查询参数获取idCode
        const idCode = req.query.idCode;
        
        // 校验参数是否存在
        if (!idCode) {
            return res.status(400).send("缺少必要的idCode参数");
        }

        // 使用模型Result执行查询,变量名改为results避免覆盖模型
        const results = await Result.find({ code: idCode });

        const data = results.find(item => item.block === 2);

        // 渲染页面并传递数据
        res.render("result/result", { results, data });
    } catch (error) {
        console.error(error);
        res.status(500).send("Internal Server Error");
    }
};

3. 优化视图展示

如果data是对象类型,直接输出会显示[Object object],可转为JSON格式方便查看:

<h3>Results</h3>
<p>Data: <%= data ? JSON.stringify(data) : "未找到对应数据" %></p>

额外说明

  • 若idCode属于敏感数据,可改用POST请求,将参数放在请求体中,前端用fetch/ajax发送POST请求,后端对应修改路由为router.post("/", ...)并从req.body获取参数。
  • 始终要对前端传入的参数做校验,避免空值、非法值导致数据库查询出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:40:28