这就是我设置expressjs服务器和mongoDB(mongoDB本机驱动程序,而不是mongoose)的方法。现在我想检查数据库中的一些现有文档,以便在服务器启动时添加一些夹具文档。 我不明白该怎么做。
类似的东西:
const hasAdmin = db.collection('users').findOne({ username: 'admin' })
if (!hasAdmin) {
// Add some data to collection
}
app.js
const app = express()
const mongoDB = mongodb://localhost:27017/mydb
// Parse application/json
app.use(bodyParser.json())
// Parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({
extended: false
}))
// GraphQL
app.use('/graphql',
bodyParser.text({ type: 'application/graphql' }),
graphqlMiddleware,
graphqlExpress(req => ({
schema: schema
}))
)
// Connect to Mongo on start
db.connect(mongodb, (err) => {
if (err) {
console.error('Unable to connect to Mongo: ' + err)
process.exit(1)
} else {
app.listen(port, () => {
console.log('Listening on port ' + port)
})
}
})
module.exports = app
答案 0 :(得分:0)
理论上你可以把它放在任何打开Mongo连接的地方。
我建议将与数据库相关的功能提取到一个单独的类中(以及一个单独的文件; separation of concerns)。
然后,您可以从该类的构造函数中调用最初填充数据库的功能。
这样的事情(这不是工作代码,但应该给你一个想法):
<强> DB-helper.js 强>
class DbHelper {
constructor() {
this.connect();
}
connect() {
// establish mongo connection
mongo.connect("...", (err, db) => {
this.db = db;
// then take care of initial filling
this.ensureDatabaseIsFilled();
});
}
ensureDatabaseIsFilled() {
const hasAdmin = this.db.collection('users').findOne({ username: 'admin' })
if (!hasAdmin) {
// Add some data to collection
}
}
/**
* Random method that retrieves data from mongo
*/
getRandomThing() {
return new Promise((resolve, reject) => {
this.db.find({...}, (err, result) => resolve(result));
});
}
}
module.exports = DbHelper;
<强> app.js 强>
const DbHelper = require('./db-helper');
const dbHelper = new DbHelper();
// ....
app.get('/example', (req, res) => {
dbHelper.getRandomThing().then(result => res.send(result));
});
// ....