koa2 通过MongoDB Driver链接 mongodb的疑惑?

发布于 2022-09-04 02:10:52 字数 1511 浏览 20 评论 0

//官方的文档如下:

var MongoClient = require('mongodb').MongoClient
  , assert = require('assert');

// Connection URL
var url = 'mongodb://localhost:27017/myproject';

// Use connect method to connect to the server
MongoClient.connect(url, function(err, db) {
  assert.equal(null, err);
  console.log("Connected successfully to server");
  
  /* 连接后的各种操作,问题就在这里
  *  koa2中有很多条路由,难道每条路由中都要如此先连接mongodb,在回调中进行操作,最后关闭,这不科学吧!
  *  
  *  感觉应该是只建立一次连接,然后将连接成功后的 "db" 保存下来,在路由中随便使用,需要关闭的时候,直接调用 db.close(),断开连接;
  *  
  *  这个db在连接的回调函数中,怎么弄出去(像同步那样)?不知道弄了。。。
  *
  */ 

  db.close();
});


/* 找资料。。。自己瞎琢磨,得到如下方式,不知是否正确?
*
*  const MongoClient = require('mongodb').MongoClient;
*  export var db = (async function() {
*    try{
*      return await MongoClient.connect('mongodb://localhost:27017/myproject');
*    }catch(err){
*      console.log(err);
*    };
*  })();
*
* 用的时候在 Koa2的路由中,如下这样
* db.then((db)=>{
*    var collection = db.collection('documents');
*    collection.find({}).toArray(function(err, docs) {
*      console.log("Found the following records");
*      console.log(docs)
*    });
* });
*
*/


// koa2中的多条路由
router.get('/', (ctx, next) => {
  //这里需要查询数据库
  db.then((db)=>{
    ...

  });

  ctx.type = 'text/html; charset=utf-8';
  ctx.body = pug.renderFile('views/index.pug',{
    pageTitle:"Pug template engine",
    pretty:true
  });
});

router.get('/test', (ctx, next) => {
  //这里需要插入数据库
  db.then((db)=>{
    ...
    
  });
  ctx.body = 'Hello Koa2';
});

 ...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

沫尐诺 2022-09-11 02:10:52

GitHub上找到了项目monk,可以满足需求!

const db = require('monk')('localhost/mydb') //连接mongdb
const users = db.get('users')                //选择集合


router.get('/', async(ctx, next) => {
  //这里增删改查操作,注意 users.find({}, {sort: {name: 1}}),返回promise对象
  let data = await users.find({}, {sort: {name: 1}});
  ctx.body = data;
});

需要断开链接是 db.close(),即可!
债姬 2022-09-11 02:10:52

建议你用sequelizejs比较热门的orm框架

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文