簡體   English   中英

所有模式的模式方法-Mongoose方法繼承

[英]Schema method for all Schema's - Mongoose method inheritance

我正在使用Mongoose在nodejs中工作,這時我在不同的集合中使用_id收集數據,例如為用戶編寫字符串,我嘗試對此進行重構並自動生成_id。

我想在其他文件中只有js函數generateID(return _id;); 並在所有模型中實現此功能,而無需在所有模型中一遍又一遍地重寫。

這是bus.js

/***********************************Bus Model**********************************/

var mongoose = require('mongoose'),
    merge    = require('merge'),
    global   = require('./schema/global');

/***********************************Schema******************************************/
var Schema = mongoose.Schema;

var busSchema = new Schema({});

/***********************************Methods*****************************************/
var bus = mongoose.model('Bus', busSchema);

/**
 * extend functions from global
 * we do this to prevent duplicate code
 */
merge(bus.schema.methods, global.schema.methods);

module.exports = bus;

這是global.js,位於項目中models文件夾的schema文件夾中

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var globalSchema = new Schema({});

function objectIdAsString() {
    return mongoose.Types.ObjectId().toString();
}

globalSchema.methods.objectIdAsString = objectIdAsString;;

module.exports = mongoose.model('global', globalSchema);

在route.js中有以下實現:

var bus = new Bus();

bus._id = bus.objectIdAsString();

解決方案是創建一個Mongoose插件

http://mongoosejs.com/docs/plugins.html

global.js

var mongoose = require('mongoose');

module.exports = exports = function objectIdAsString(schema) {
  schema.methods.objectIdAsString = function objectIdAsString() {
    return mongoose.Types.ObjectId().toString();
  };
}

bus.js

/***********************************Bus Model**********************************/

var mongoose = require('mongoose'),
    merge    = require('merge'),
    global   = require('./schema/global');

/***********************************Schema******************************************/
var Schema = mongoose.Schema;

var busSchema = new Schema({});
/**
 * extend functions from global
 * we do this to prevent duplicate code
 */
busSchema.plugin(global);

module.exports = mongoose.model('Bus', busSchema);

別的地方:

var bus = new bus();
console.log(bus.objectIdAsString());

正在為我輸出正確的值:

566b35a02a54c60e168c3a9f
566b35a02a54c60e168c3aa1
566b35a02a54c60e168c3aa3
.....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM