Express/Mongoose - 错误:传入的参数必须是 12 个字节的单个字符串

Posted

技术标签:

【中文标题】Express/Mongoose - 错误:传入的参数必须是 12 个字节的单个字符串【英文标题】:Express/Mongoose - Error: Argument passed in must be a single String of 12 bytes 【发布时间】: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 【参考方案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)
      );
    );

【讨论】:

以上是关于Express/Mongoose - 错误:传入的参数必须是 12 个字节的单个字符串的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose & Express:从子文档发布数据

Mongoose & Express:从子文档发布数据

您如何在 Node.js + Express + Mongoose + Jade 中处理表单验证,尤其是嵌套模型

通过 express、mongoose 和 angular 删除 mongo 文档时出现 404

Express/Mongoose 仅​​将部分请求数据保存到数据库

mongoose 中本地护照的身份验证错误