【问题标题】:How to fix querying issues with mongoose and express [duplicate]如何解决 mongoose 和 express 的查询问题 [重复]
【发布时间】:2022-01-25 05:20:35
【问题描述】:

我对动态路由还是很陌生,虽然这很有意义,但我在正确实现它时遇到了问题。下面是我想从数据库中获取用户购买并将其导出为 csv 的函数。我让它在本地 mongoDB 上工作,但是当我搬到 Atlas 进行托管时,它只抓取数据库中列出的第一个人,而不是登录的人。我能否获得一些关于我的 req.params 为何不起作用的指导。提前谢谢你。

(此路由将属于服务器中的 app.use(/profile, profile))

 profile.js

// DOWNLOADING CSV OF PURCHASES
router.get("/purchased-items/:id", csvAbuseLimiter, (req, res) => {
  if (req.isAuthenticated()) {
    User.findOne({ id: req.query.id }, (err, foundUser) => {
      if (foundUser) {
        console.log(foundUser);
        const userPurchases = foundUser.purchases;
        const fields = ["name", "order", "duration", "asset"];
        const json2cvsParser = new Parser({ fields });
        try {
          const csv = json2cvsParser.parse(userPurchases);
          res.attachment(`${req.user.username}-purchases.csv`);
          res.status(200).send(csv);
          req.flash("success", "successful download");
        } catch (error) {
          console.log("error:", error.message);
          res.status(500).send(error.message);
        }
      }
    });
  }
});

用户登录

路线在拉什么。

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    在提供的代码中,您使用的是req.query.id 而不是req.params.id

    【讨论】:

    • 我也试过 req.params.id ,它仍然做同样的事情。我目前正在重新测试它,因为我输入它并提取了与上面发布的相同的查询。我需要更改 findOne 的属性吗?
    • 仔细检查后,您的文档没有id 字段。它有一个_id 字段,其类型为ObjectId。对于刚开始使用 Mongoose 的人来说,这是一个常见的陷阱。
    • 这有助于我理解为什么不使用 id 并且我很感激!我现在的最后一个问题是,在我将代码变为 async --> const query = await User.where({username:req.params.username}) 之后,它的持有是因为查询没有从 req 中获取用户名,但是如果我使用req.user.username 它将立即获取查询。
    • @kofiboateng 这取决于您如何将数据传递给请求处理程序。我怀疑它与某些中间件有关。
    猜你喜欢
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多