【发布时间】:2017-06-27 17:22:12
【问题描述】:
我实际上是在使用 node 和 mongodb 迈出第一步,我最近遇到了这个 RangeError 墙。
这就是我要做的,我有一个文件,其中包含我想添加到我的 mongo db 的国家列表。这将是我让应用运行的“种子”机制的一部分。
我加载 json,然后遍历对象集合并将它们一一添加到“Countries”集合中。 但是,每次我运行代码时,都会收到“RangeError: Maximum call stack size exceeded”。
我用谷歌搜索过,但建议的解决方案似乎都不适用于我。 我的猜测是我的 insertCountry 函数有问题...
无论如何,这是我的代码:
var mongoose = require('mongoose');
var countries = require('./seed/countries.json');
// mongodb
var Country = mongoose.Schema({
name: String,
code: String,
extra: [Extra]
});
var Extra = mongoose.Schema({
exampleField: Boolean,
anotherField: Boolean
});
var mCountry = mongoose.model('Countries', Country);
var mExtra = mongoose.model('Extras', Extra);
// do connection
mongoose.connect('...');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error'));
db.once('open', function callback() {
});
// async function
var insertCountry = function(document, callback) {
db.model('Countries').count({code: document.code}, function (err, count) {
if (count < 1) {
db.collection('Countries').insert(document, function (err, result) {
if (!err) {
console.log('country ' + document.name + ' added');
}
else {
console.log('- [' + document.name + '] ' + err);
}
});
}
callback(null,document);
});
};
// doing countries
var Country = mongoose.model('Countries');
var Extras = mongoose.model('Extras');
for(i = 0; i < countries.length; i++)
{
nCountry = new Country();
nCountry.name = countries[i].name;
nCountry.code = countries[i].code;
nCountry.benefits = new Extras();
nCountry.benefits.exampleField = false;
nCountry.benefits.anotherField = false;
insertCountry(nCountry, function (err, value) {
console.log(value.name + ' added to collection (callback)');
});
}
我一直在使用我发现的一些指南来构建它,因此这可能不是最佳代码。欢迎您分享任何最佳实践、标准、指南或教程!
【问题讨论】:
标签: javascript node.js mongodb mongoose