Как определить методы в модели Mongoose? - PullRequest
36 голосов
/ 14 сентября 2011

Мой locationsModel файл:

mongoose = require 'mongoose'
threeTaps = require '../modules/threeTaps'

Schema = mongoose.Schema
ObjectId = Schema.ObjectId

LocationSchema =
  latitude: String
  longitude: String
  locationText: String

Location = new Schema LocationSchema

Location.methods.testFunc = (callback) ->
  console.log 'in test'


mongoose.model('Location', Location);

Чтобы позвонить, я использую:

myLocation.testFunc {locationText: locationText}, (err, results) ->

Но я получаю ошибку:

TypeError: Object function model() {
    Model.apply(this, arguments);
  } has no method 'testFunc'

Ответы [ 4 ]

42 голосов
/ 15 августа 2013

Вы не указали, хотите ли вы определить методы класса или экземпляра.Так как другие рассмотрели методы экземпляра, вот как вы определяете класс / статический метод:

animalSchema.statics.findByName = function (name, cb) {
    this.find({ 
        name: new RegExp(name, 'i') 
    }, cb);
}
27 голосов
/ 16 сентября 2011

Хмм - я думаю, ваш код должен выглядеть примерно так:

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

var threeTaps = require '../modules/threeTaps';


var LocationSchema = new Schema ({
   latitude: String,
   longitude: String,
   locationText: String
});


LocationSchema.methods.testFunc = function testFunc(params, callback) {
  //implementation code goes here
}

mongoose.model('Location', LocationSchema);
module.exports = mongoose.model('Location');

Тогда для вашего кода вызова может потребоваться указанный выше модуль и создать модель, подобную этой:и получите доступ к своему методу следующим образом:

  aLocation.testFunc(params, function() { //handle callback here });
17 голосов
/ 25 августа 2012

См. Документы Mongoose о методах

var animalSchema = new Schema({ name: String, type: String });

animalSchema.methods.findSimilarTypes = function (cb) {
  return this.model('Animal').find({ type: this.type }, cb);
}
1 голос
/ 05 октября 2014
Location.methods.testFunc = (callback) ->
  console.log 'in test'

должно быть

LocationSchema.methods.testFunc = (callback) ->
  console.log 'in test'

Методы должны быть частью схемы.Не модель.

...