我刚开始使用mongoDB,不得不说官方文档对如何使用nodejs实现它不是很好。
我真的不知道如何构建服务器文件以添加mongoClient.connect,是否应该在mongoClient.connect函数中编写我的整个服务器才能访问数据库,例如在this boilerplate中?我正在使用nodeJS / express。
如果您知道任何优秀的样板,或者任何东西,可以通过mongoDB的实现向我展示后端的结构,我将不胜感激。每次我发现有关mongoDB的东西时,实际上都是关于mongooooose的!!
答案 0 :(得分:1)
我已经找到了几种方法,即使在 mongoDB 的官方页面中也是如此。
到目前为止,我更喜欢这个(不是我的,下面的来源),您在一个文件中实例化连接并将其和数据库/客户端导出到实例化 express 的服务器文件:
(我只复制了重要的内容,没有错误处理)
// 数据库.js
const MongoClient = require('mongodb').MongoClient;
let _db; //'_' private
const mongoConnect = function(callback) {
MongoClient.connect(
'mongodb://localhost:27017',
{ useUnifiedTopology: true }
)
.then(client => {
_db = client.db('onlineshopping');
callback();
})
.catch(error => {
console.log(err);
throw new Error('DB connection failed...');
});
}
const getDB = () => {
if (_db) {
return _db;
} else {
throw new Error('DB connect failed');
}
}
exports.mongoConnect = mongoConnect;
exports.getDB = getDB;
// index.js
const express = require('express');
const app = express();
const mongoConnect = require('./util/database').mongoConnect;
// ...
mongoConnect(() => {
app.listen(3000);
})
来源: https://github.com/TinaXing2012/nodejs_examples/blob/master/day9/util/database.js 与我在本主题中推荐的 YouTube 课程相对应:https://www.youtube.com/watch?v=hh-gK0_HLEY&list=PLGTrAf5-F1YLBTY1mToc_qyOiZizcG_LJ&index=98
来自 mongoDB 官方存储库的其他替代方案是:
答案 1 :(得分:0)
经过进一步的研究,这就是我想要的,对于那些像我一样想知道如何使用Express实现MongoDB(而不是mongoose)的人:
var express = require('express');
var mongodb = require('mongodb');
var app = express();
var MongoClient = require('mongodb').MongoClient;
var db;
// Initialize connection once
MongoClient.connect("mongodb://localhost:27017/integration_test", function(err, database) {
if(err) throw err;
db = database;
// Start the application after the database connection is ready
app.listen(3000);
console.log("Listening on port 3000");
});
// Reuse database object in request handlers
app.get("/", function(req, res) {
db.collection("replicaset_mongo_client_collection").find({}, function(err, docs) {
docs.each(function(err, doc) {
if(doc) {
console.log(doc);
}
else {
res.end();
}
});
});
});