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);

    .

  • 相关阅读:
    卫星时间同步装置的安装及售后
    windowsU盘重装系统:操作流程
    vue安装正确流程
    win10以太网未识别的网络
    [UnityShader]unity中2D Sprite显示阴影和接受阴影
    [UnityShader]说厌了的遮挡显示
    [Unity]利用Mesh绘制简单的可被遮挡,可以探测的攻击指示器
    ConcurrentHashMap源码解读
    Vector底层原理
    LinkedList集合底层原理
  • 原文地址:https://www.cnblogs.com/crazycode2/p/10958186.html
Copyright © 2011-2022 走看看