成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

ThinkJS2 mongoose 使用

Jeff / 1995人閱讀

摘要:根據(jù)李成銀大大的文章示例想做的使用,發(fā)現(xiàn)有部分問題直接使用創(chuàng)建,每次創(chuàng)建實例導致重新創(chuàng)建新的連接,導致數(shù)據(jù)庫連接無限上漲將緩存使用,導致的復寫將這兩個問題修復后,代碼如下不過修改,自動編譯不會的不會直接修復,需要重啟服務生效創(chuàng)建連接連接數(shù)據(jù)

根據(jù)李成銀大大的文章示例想做ThinkJS的mongoose使用,發(fā)現(xiàn)有部分問題:
1、mongoose直接使用createConnection創(chuàng)建,每次Model創(chuàng)建實例導致重新創(chuàng)建新的連接,導致數(shù)據(jù)庫連接無限上漲;
2、將connection緩存使用,導致mongoose的Model復寫;

將這兩個問題修復后,代碼如下:
不過修改schema,自動編譯不會mongoose的Model不會直接修復,需要重啟服務生效;

"use strict";

let mongoose = require("mongoose");

let conn = null;
/**
 * model
 */
export default class extends think.base {
  /**
   * schema
   * @type {Object}
   */
  schema = {};
  /**
   * model instance
   * @type {[type]}
   */
  _model = null;

  /**
   * constructor
   * @param  {[type]} name   [description]
   * @param  {Object} config [description]
   * @return {[type]}        [description]
   */
  constructor(name, config = {}) {
    super();
    if (think.isObject(name)) {
      config = name;
      name = "";
    }
    this.name = name;
    this.config = think.parseConfig(config);
  }

  /**
   * 創(chuàng)建連接
   * @return {[type]} [description]
   */
  getConnection() {
    if (conn) {
      return conn;
    }
    let user = "";
    if (this.config.user) {
      user = this.config.user + ":" + this.config.password + "@";
    }
    let host = this.config.host || "127.0.0.1";
    let port = this.config.port || 27017;
    let str = `mongodb://${user}${host}:${port}/${this.config.database}`;
    conn = mongoose.createConnection(str);
    conn.on("connected", function (err) {
      if (err) {
        think.log("連接數(shù)據(jù)庫失敗:" + err);
      } else {
        think.log("連接數(shù)據(jù)庫成功!");
      }
    });
    mongoose.Promise = Promise;
    return conn;
  }

  /**
   * 獲取 Mongoose 里的 Model
   * @return {[type]} [description]
   */
  getModel() {
    if (!this._model) {
      let connection = this.getConnection();
      if(this.name in connection.models){
        this._model = connection.model(this.name);
      }else{
        this._model = connection.model(this.name, new mongoose.Schema(this.schema));
      }
    }
    return this._model;
  }
}

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/90101.html

相關文章

  • 在Node中基于Mongoose對MongoDB進行增刪查改(CRUD)操作(一)

    摘要:如圖連接成功后,顯示你的數(shù)據(jù)庫,在這個節(jié)目可以對數(shù)據(jù)庫進行操作。如圖安裝與加載首先假定你已經(jīng)安裝了,命令行工具輸入在使用的文件中即可。創(chuàng)建讀取更新刪除單值讀取上文是在中基于對進行增刪查改操作的簡單介紹,以后會有進階的文章。 關鍵詞:mongodb安裝 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查詢,增加,修改,刪除 工具介紹 Mon...

    lemon 評論0 收藏0
  • 在Node中基于Mongoose對MongoDB進行增刪查改(CRUD)操作(一)

    摘要:如圖連接成功后,顯示你的數(shù)據(jù)庫,在這個節(jié)目可以對數(shù)據(jù)庫進行操作。如圖安裝與加載首先假定你已經(jīng)安裝了,命令行工具輸入在使用的文件中即可。創(chuàng)建讀取更新刪除單值讀取上文是在中基于對進行增刪查改操作的簡單介紹,以后會有進階的文章。 關鍵詞:mongodb安裝 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查詢,增加,修改,刪除 工具介紹 Mon...

    SillyMonkey 評論0 收藏0
  • mongodb數(shù)據(jù)庫的使用

    最近在學習node,所以聽說node和mongodb更配哦。。所以我就來學習mongodb了showImg(https://segmentfault.com/img/remote/1460000006818697); 一、mongodb的開啟和關閉 1. 查找mongod是否可用 which mongod 2. 啟動mongodb 指定path 和log日志 mongod --dbpath /...

    劉玉平 評論0 收藏0

發(fā)表評論

0條評論

Jeff

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<