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 个字节的单个字符串的主要内容,如果未能解决你的问题,请参考以下文章
您如何在 Node.js + Express + Mongoose + Jade 中处理表单验证,尤其是嵌套模型
通过 express、mongoose 和 angular 删除 mongo 文档时出现 404