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

如何用Node.js从MongoDB取数据并推入数组?500错误求助

问题分析与解决

核心错误原因

你代码里的500错误是因为错误操作了Express的响应对象res:你尝试调用res.users.push(),但res是Express框架的响应实例,它本身并没有users这个属性,调用不存在属性的push方法会触发TypeError,进而进入catch块返回500状态码。

修正后的代码示例

//-----login ui form-----
router.get("/user/login", function (req, res) {
  res.render("users/login.ejs");
});
//------ Post ---
router.post("/user_secret", async (req, res) => {
  const email = req.body.username;
  console.log(email);
  // 用let声明局部变量,避免全局污染
  let users = [];
  try {
    const user = await User.findOne({ USER_SECRET: email });
    if (!user) {
      return res.status(404).send("Inputs are Incorrect Information");
    }
    // 往自己定义的users数组push数据,而非res对象
    users.push({
      username: user.USER_SECRET,
      password: user.PASS_SECRET,
    });
    
    // 这里可以添加后续逻辑,比如渲染页面或返回JSON
    // 示例1:渲染页面并传递users数组
    res.render("users/addOrEdit", { users });
    // 示例2:返回JSON格式的用户数组
    // res.json(users);
  } catch (e) {
    // 打印错误信息到控制台,方便排查
    console.error(e);
    res.status(500).send("服务器内部错误");
  }
});

关于你的疑问

  1. 是否需要用map方法?
    不需要。map方法用于对数组的每个元素进行转换并返回新数组,而你这里只是将单个查询到的用户对象转成新格式后推入数组,直接用push就足够。

  2. 如何检查users[]数组是否有数据?

    • 控制台打印:在push操作后添加console.log(users),查看终端/控制台的输出内容;
    • 长度判断:用if (users.length > 0)来判断数组是否包含数据;
    • 前端验证:如果是将数组传递给模板或返回给前端,可以在对应位置打印或渲染数组内容进行验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:18:09