gpt4 book ai didi

javascript - Mongoose 的默认数据库数据

转载 作者:行者123 更新时间:2023-11-28 05:52:34 26 4
gpt4 key购买 nike

我对 Node.js 和 MEAN 堆栈还很陌生,但我正在尝试构建一个应用程序。在这个应用程序中,数据库中会有一些默认数据。我希望在应用程序启动时发生此数据填充。因此,它基本上会检查默认数据,如果不存在则创建它。在一种情况(设置)中,这是将存储本地设置的一条记录。在另一种情况下,它通过遍历数组向数据库添加几条默认记录。我将所有这些放在一个模块中并在 server.js 中对其进行校准,但我有一种感觉我做错了。看起来我开始进入回调 hell ,我想知道我是否应该使用异步库来实现此目的或 promise 或其他东西。由于这些数据库调用实际上不会在服务器启动之前命中,因此这可能是一个潜在的问题。

正如我所说,我是 Node.js 的新手,所以任何输入都会很棒。下面是应用程序启动时在 server.js 中调用的模块和两个函数。

谢谢!

var config = require('./config');
var Settings = require('./app/models/settings')
var Source = require('./app/models/source');

module.exports =
{
settings: function () {
//check to see if any records exists
Settings.find({}, function (err, settings) {
if (err)
return (err);

if (settings.length == 0) {
//populate default settings
var defaultSettings = new Settings();
console.log(defaultSettings);
defaultSettings.save(function(err){
return (err);
});
}
else {
return settings[0];
}
});
},
sources: function () {
Source.find({}, function (err, sources) {
if (sources.length == 0) {
defaultSources.forEach(function (item, index) {
s = new Source();
s.domain = item.domain;
s.loginPage = item.loginPage;
s.scanUrl = item.scanUrl;
s.sourceType = item.sourceType;
s.cssSelect = item.cssSelect;
s.save(function (err) {
if (err) return err;
});
});
}
});
}
}


var defaultSources = [
{
domain: 'http://tehparadox.com',
loginPage: 'http://tehparadox.com',
scanUrl: 'http://tehparadox.com/forum/f63/tv-shows-2010-2011-hd-1439182/',
sourceType: 'TV and Movies',
cssSelect: '.post a'
},
{
domain: 'http://tehparadox.com',
loginPage: 'http://tehparadox.com',
scanUrl: 'http://tehparadox.com/forum/f63/tv-shows-2010-2011-hd-1439182/',
sourceType: 'TV and Movies',
cssSelect: '.post a'
},
{
domain: 'http://tehparadox.com',
loginPage: 'http://tehparadox.com',
scanUrl: 'http://tehparadox.com/forum/f63/tv-shows-2010-2011-hd-1439182/',
sourceType: 'Index',
cssSelect: '.post a'
},
{
domain: 'http://tehparadox.com',
loginPage: 'http://tehparadox.com',
scanUrl: 'http://tehparadox.com/forum/f63/tv-shows-2010-2011-hd-1439182/',
sourceType: 'Search',
cssSelect: '.post a'
}
]

最佳答案

我明白了!这里有很多内容,但我基本上了解了 Promise,它改变了一切!

var bodyParser = require('body-parser');
var Settings = require('../models/settings');
var Source = require('../models/source');

module.exports = function (app, express) {
var apiRouter = express.Router();

apiRouter.route('/settings')
.get(function (req, res) {
//check to see if any records exists
var settingsPromise = Settings.find({}).exec();
settingsPromise.then(function (settings) {
if (settings.length == 0) {
var defaultSettings = new Settings();
var newPromise = defaultSettings.save(); // might need more error handling here
newPromise.then(function () { res.json(defaultSettings) })
}
else {
res.json(settings[0]);
}
})
.catch(function (err) {
res.json({ success: false, message: err })
})
})
.put(function (req, res) {
var id = req.body.id;
var promise = Settings.findOneAndUpdate({ _id: id }, req.body).exec();
promise.then(function (settings) {
res.json({ status: true, message: 'Settings updated.' });
})
.catch(function (err) {
res.json({ success: false, message: err });
});
});

apiRouter.route('/sources')
.get(function (req, res) {
// show all sources
var sourcePromise = Source.find({});
sourcePromise.then(function (source) {
if (source.length == 0) {
// add default sources
var addActions = defaultSources.map(defaultPromises) // a handy collection of promises
var results = Promise.all(addActions); // wait for them all to complete here with 'Promise.all'
results.then(function (data) {
res.json(data);
})
results.catch(function (err) {
res.json({ success: false, message: err });
})
}
else {
res.json(source);
}
})
.catch(function (err) {
res.json({ success: false, message: err });
})
})
.post(function (req, res) {
var newSource = new Source();
var sourcePromise = newSource.save();
sourcePromise.then(function(source){
res.json({success: true, message : 'New source added.'})
})
.catch(function(err){
res.json({ success: false, message: err });
})

})
apiRouter.route('/sources/:source_id')
.get(function (req, res) {
// show single source
var sourcePromise = Source.findOne(req.params.source_id).exec();
sourcePromise.then(function (source) {
return res.json(source);
})
.catch(function (err) {
return res.json({ status: false, message: err })
})
})
.put(function (req, res) {
// show single source
var sourcePromise = Source.findOneAndUpdate({ _id: req.params.source_id }, req.body).exec();
sourcePromise.then(function (source) {
return res.json({ status: true, message: 'Source updated.' });
})
.catch(function (err) {
return res.json({ status: false, message: err })
})
})
.delete(function(req, res){
var sourcePromise = Source.findOneAndRemove({_id: req.params.source_id}).exec()
sourcePromise.then(function(source){
return res.json({ status: true, message: 'Source deleted.' });
})
.catch(function (err) {
return res.json({ status: false, message: err })
})
})

return apiRouter;

};

var defaultPromises = function (item) {
s = new Source();
s.domain = item.domain;
s.loginPage = item.loginPage;
s.scanUrl = item.scanUrl;
s.sourceType = item.sourceType;
s.cssSelect = item.cssSelect;
return savePromise = s.save();
}

var defaultSources = [
{
domain: 'http://tehparadox.com',
loginPage: 'http://tehparadox.com',
scanUrl: 'http://tehparadox.com/forum/f63/tv-shows-2010-2011-hd-1439182/',
sourceType: 'TV and Movies',
cssSelect: '.post a'
},
{
domain: 'http://tehparadox.com',
loginPage: 'http://tehparadox.com',
scanUrl: 'http://tehparadox.com/forum/f63/tv-shows-2010-2011-hd-1439182/',
sourceType: 'TV and Movies',
cssSelect: '.post a'
},
{
domain: 'http://tehparadox.com',
loginPage: 'http://tehparadox.com',
scanUrl: 'http://tehparadox.com/forum/f63/tv-shows-2010-2011-hd-1439182/',
sourceType: 'Index',
cssSelect: '.post a'
},
{
domain: 'http://tehparadox.com',
loginPage: 'http://tehparadox.com',
scanUrl: 'http://tehparadox.com/forum/f63/tv-shows-2010-2011-hd-1439182/',
sourceType: 'Search',
cssSelect: '.post a'
}
]

关于javascript - Mongoose 的默认数据库数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37974695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com