如何在Express中使用mongoClient.connect?

时间:2018-09-20 13:47:35

标签: node.js mongodb express

我刚开始使用mongoDB,不得不说官方文档对如何使用nodejs实现它不是很好。

我真的不知道如何构建服务器文件以添加mongoClient.connect,是否应该在mongoClient.connect函数中编写我的整个服务器才能访问数据库,例如在this boilerplate中?我正在使用nodeJS / express。

如果您知道任何优秀的样板,或者任何东西,可以通过mongoDB的实现向我展示后端的结构,我将不胜感激。每次我发现有关mongoDB的东西时,实际上都是关于mongooooose的!!

2 个答案:

答案 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();
      }
    });
  });
});