【问题标题】:Passing argument to mongoose nested query将参数传递给猫鼬嵌套查询
【发布时间】:2019-04-06 13:20:14
【问题描述】:

我不明白为什么会收到 504 网关超时。

app.get("/api/exercise/log", function(req,res) {
  let userId = req.query.userId;
  let from = req.query.from;
  let to = req.query.to;
  let limit = req.query.limit;
  console.log("limit1 " + limit);
  User.findById(userId).exec(function (err,data) {
    console.log("limit2 " + limit);
    if (err) return err;
    Exercise.find({userId: userId}).limit(limit).exec(function (err2,data2) {
      console.log("limit3 " + limit);
      if (err2) return err2;
      let logArr = [];
      logArr.push(data2);
      let total = logArr[0].length;
      let answer = Object.assign({}, data._doc, {log: logArr}, {total: total});  
      res.json(answer);
    })    
  })  
})

我的网址以 log?userId=555&limit=2 结尾。所有控制台日志(limit1、limit2、limit3)都按预期打印出“2”,但是我没有得到任何结果,只有超时。如果我更改该行以手动输入限制,例如

Exercise.find({userId: userId}).limit(2).exec(function (err2,data2) {

一切正常,我得到正确数量的结果。这是怎么回事?

【问题讨论】:

  • .limit(parseInt(limit))。所有参数都是“字符串”,函数需要一个数值。所以你需要parseInt() 或类似的来转换它。
  • 大声笑。明白了,谢谢。
  • 有趣的是我在这里能找到的唯一其他相关问题是something I also commented on years ago 并且也从未得到答案:(。Web 服务器请求是“字符串”,所以请务必记住转换它们。位很惊讶 limit() 的 mongoose 包装器不会自动执行此操作。考虑到几乎在其他任何地方进行类型转换的整个“模式”方法。

标签: javascript mongodb express mongoose mongodb-query


【解决方案1】:

使用 parseInt 更改数字的限制,并检查该值是否可以转换为数字。

app.get("/api/exercise/log", function(req,res) {
  let userId = req.query.userId;
  let from = req.query.from;
  let to = req.query.to;
  let limit = 10;
  if(!isNaN(req.query.limit)){
      limit = parseInt(req.query.limit);   // use limit from query params if it is a valid number
  }
  console.log("limit1 " + limit);
  User.findById(userId).exec(function (err,data) {
    console.log("limit2 " + limit);
    if (err) return err;
    Exercise.find({userId: userId}).limit(limit).exec(function (err2,data2) {
      console.log("limit3 " + limit);
      if (err2) return err2;
      let logArr = [];
      logArr.push(data2);
      let total = logArr[0].length;
      let answer = Object.assign({}, data._doc, {log: logArr}, {total: total});  
      res.json(answer);
    })    
  })  
})

【讨论】:

    猜你喜欢
    • 2021-03-23
    • 2020-12-31
    • 2021-04-11
    • 2018-08-31
    • 2019-04-05
    • 2013-02-04
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多