zoukankan      html  css  js  c++  java
  • koa 基础(二十三)封装 DB 库 --- 应用

    1.根目录/module/config.js

    /**
     * 配置文件
     */
    var app = {
      dbUrl: 'mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb',
      dbName: 'koa'
    }
    
    module.exports = app;

    2.根目录/module/db.js

    /**
     * DB库
     */
    var MongoClient = require('mongodb').MongoClient;
    var Config = require('./config.js');
    
    class Db {
      /**
       * 单例
       * 解决多次实例化,实例不共享的问题
       */
      static getInstance() {
        if (!Db.instance) {
          Db.instance = new Db();
        }
        return Db.instance;
      }
    
      constructor() {
        this.dbClient = ''; /*属性 存放db对象*/
        this.connect(); /*实例化的时候就连接数据库*/
      }
    
      connect() { /*连接数据库*/
        let _that = this;
        return new Promise((resolve, reject) => {
          if (!_that.dbClient) { /*解决数据库多次连接的问题*/
            MongoClient.connect(Config.dbUrl, (err, client) => {
              if (err) {
                reject(err);
              } else {
                _that.dbClient = client.db(Config.dbName);
                resolve(_that.dbClient);
              }
            })
          } else {
            resolve(_that.dbClient);
          }
        })
      }
    
      find(collectionName, json) {
        return new Promise((resolve, reject) => {
          this.connect().then((db) => {
            var result = db.collection(collectionName).find(json);
            result.toArray((err, docs) => {
              if (err) {
                reject(err);
                return;
              }
              resolve(docs);
            })
          })
        })
      }
    
      insert() {
        //
      }
    }
    
    module.exports = Db.getInstance();

    3.根目录/app.js

    // 引入模块
    const Koa = require('koa');
    const router = require('koa-router')(); /*引入是实例化路由 推荐*/
    const render = require('koa-art-template');
    const path = require('path');
    const DB = require('./module/db.js');
    
    // 实例化
    let app = new Koa();
    
    // 配置 koa-art-template 模板引擎
    render(app, {
      root: path.join(__dirname, 'views'), // 视图的位置
      extname: '.html', // 后缀名
      debug: process.env.NODE_ENV !== 'production' // 是否开启调试模式
    })
    
    router.get('/', async (ctx) => {
      console.time('start1');
      let result = await DB.find('user', {});
      console.log(result);
      console.timeEnd('start1');
    
      await ctx.render('index', {
        list: {
          name: '张三'
        }
      });
    })
    
    router.get('/news', async (ctx) => {
      console.time('start2');
      let result = await DB.find('user', {});
      console.log(result);
      console.timeEnd('start2');
    
      ctx.body = '新闻页面';
    })
    
    app.use(router.routes());
    app.use(router.allowedMethods());
    
    app.listen(3000);

    .

  • 相关阅读:
    P2319 [HNOI2006]超级英雄
    P4302 [SCOI2003]字符串折叠
    P1122 最大子树和
    HDU——2089 不要62
    P4555 最长双回文串
    P1463 [HAOI2007]反素数
    P2412 查单词
    P2787 语文1(chin1)- 理理思维
    P3078 [USACO13MAR]扑克牌型Poker Hands
    ubuntu中desktop与alternate版本的区别(转载)
  • 原文地址:https://www.cnblogs.com/crazycode2/p/10958186.html
Copyright © 2011-2022 走看看