【问题标题】:Express/Mongoose - Error: Argument passed in must be a single String of 12 bytesExpress/Mongoose - 错误:传入的参数必须是 12 个字节的单个字符串
【发布时间】:2021-10-18 01:00:26
【问题描述】:

我从 Angular 服务接收一个数组并将其传递给 Mongoose/Express。我正在尝试查询 ObjectIds 并检索所有结果,但是当将我的数组转换为 ObectIds 时,我收到:错误:传入的参数必须是 12 个字节的单个字符串或 24 个十六进制字符的字符串。
我传递的数组是: 阵列(6)[ “6104842e42c23e6d215651ca”, “6104844e42c23e6d215651cd”, “610484e042c23e6d215651e1”, “610484bf42c23e6d215651d2”, “6104838a42c23e6d215651c4”, “610483a342c23e6d215651c6”] P>

router.get('/favorite-image/:id', (req, res) => {
  const ObjectId = require('mongodb').ObjectId;
  var idArray = [req.params.id];
  var ids = idArray.map(function(el){ return ObjectId(el)});    
  gfs.files.find({'_id': {$in: ids}}, (err, files) => {
    //check if files exist
    if (!files || files.length == 0) {
      return res.status(404).json({
        err: "No files exist"
      });
    };
    //file exist
    console.log(res.json(files))
    return res.json(files)
  });
});

我也尝试了 forEach 循环,但也没有用:

idArray.forEach(function (el){
  String(el);
  ObjectId(el);
})

非常感谢任何帮助。

【问题讨论】:

  • 你是说req.params.id是一个数组吗?那么idArray 是一个数组数组,而猫鼬喜欢得到传递的字符串而不是数组。您能否添加将console.log(typeof el, el) 放入循环时得到的输出,以澄清这一点?
  • 我收到:字符串 6104842e42c23e6d215651ca

标签: javascript arrays express mongoose


【解决方案1】:

我不得不使用 map 而不是 forEach

router.get('/favorite-image/',  (req, res) => { 
    //console.log(req.params.id)
  const ObjectId = require('mongodb').ObjectId;
  var g = req.params.id.split(',');
    let mid = g.map(function(el){String(el);ObjectId(el); return el});
    //console.log(mid);
  gfs.files.find(
     
     {_id: {$in: mid}}).toArray ((err, files) => { 
        // check if files exist
    console.log('here');
        if (!files || files.length == 0) {
      console.log('fail')
          return res.status(404).json({
            err: "No files exist"
          });
        };
        //file exist
        // console.log(res.json(files));
    console.log('success')
        return res.json(files)
      });
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    相关资源
    最近更新 更多