【发布时间】:2017-01-29 21:55:23
【问题描述】:
我正在使用 i18n 制作一个小型网站。开始时我使用本地 json 文件,但在切换到 mongodb 后,我遇到了一个我不明白的错误。非常感谢一个好的解释。
我得到的错误是这样的:
TypeError:在不兼容的接收器 [object Object] 上调用方法 Uint8Array.length
我用“da”和“en”属性构造 i18n 数据。然后我使用一种过滤相关语言的方法。
这是我的数据示例,包括 json 和相应的 mongoose 结果。两者都是从终端复制的(用console.log打印):
json
[ { lang: { da: 'Dansk', en: 'Danish' }, rating: 5 },
{ lang: { da: 'Engelsk', en: 'English' }, rating: 5 },
{ lang: { da: 'Tysk', en: 'German' }, rating: 5 } ]
猫鼬
[ { _id: 57e2561369e4bc0a8ca6c630,
lang: { da: 'Dansk', en: 'Danish' },
rating: 5,
id: '57e2561369e4bc0a8ca6c630' },
{ _id: 57e2561369e4bc0a8ca6c631,
lang: { da: 'Engelsk', en: 'English' },
rating: 5,
id: '57e2561369e4bc0a8ca6c631' },
{ _id: 57e2561369e4bc0a8ca6c632,
lang: { da: 'Tysk', en: 'German' },
rating: 5,
id: '57e2561369e4bc0a8ca6c632' } ]
filterLanguage 方法
var traverse = require('traverse');
var filterLanguage = function(language, obj) {
return traverse(obj).map(function (item) {
if (this.key === language) {
this.parent.update(item);
}
});
};
所以filterLanguage('da', languages); 应该返回如下内容:
[ { lang: 'Dansk', rating: 5 },
{ lang: 'Engelsk', rating: 5 },
{ lang: 'Tysk', rating: 5 } ]
filterLanguage() 适用于本地有效的 JSON 文件,但不适用于 Mongoose 结果集...
我试过JSON.stringify(obj)。我还尝试在 Mongoose 模型中设置 toObject() 方法,但没有成功。
我做错了什么,我该如何解决?
--------- 编辑 ---------
型号
var mongoose = require('mongoose');
var languageSchema = mongoose.Schema({
local: {
lang: { da: String, en: String },
rating: Number
}
});
module.exports = mongoose.model('Language', languageSchema);
查询
language.find({}, function(err, results) {
var obj = filterLanguage(lang, results.languages);
console.log(obj);
});
我尝试在架构上设置toObject,如下所示:
languageSchema.set('toObject', { virtuals: true });
【问题讨论】:
-
什么是
traverse()?你为什么要传递results.experience而这似乎不是你架构的一部分? -
更新问题:traverse 是一个用于遍历 js 对象的 npm 库。经验是复制/粘贴错误,应该是语言。请注意,这是一个简化的示例,而不是完整的代码。因此更容易获得概览。
标签: json node.js mongodb express mongoose