【问题标题】:how to include external models in mongoose?如何在猫鼬中包含外部模型?
【发布时间】:2012-03-20 18:46:53
【问题描述】:

当我想在 nodejs 中包含我的模型和猫鼬时,我遇到了一个问题,我正在使用这样的模式创建一个模型

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

var Users = new Schema({
    idUser  : {type:String},
    username: {type:String}
});

// middleware
Users.pre('save', function (next,done) {
  notify(this.get('email') + done);
  // something goes wrong
  next(new Error('something went wrong'));
});

//registered on mongoose models
mongoose.model("Users",Users);

我保存在折叠模型/schema.js 但是当我尝试使用此代码时,我不知道如何在 app.js 中调用该文件

var mongoose = require('mongoose')
  , models = require('./models/schema.js');

//mongoose configurationfor database;
var db = mongoose.connect("mongodb://localhost/vynchat");
var users = mongoose.model("Users");
users.save();

当我尝试启动sudo node app.js时出现错误

throw e; // process.nextTick error, or 'error' event on first tick
              ^
TypeError: Object function model() {
    Model.apply(this, arguments);
  } has no method 'save'
    at Object.<anonymous> (/opt/development/vynapp/app.js:18:7)
    at Module._compile (module.js:441:26)
    at Object..js (module.js:459:10)
    at Module.load (module.js:348:31)
    at Function._load (module.js:308:12)
    at Array.0 (module.js:479:10)
    at EventEmitter._tickCallback (node.js:192:40)

错误模型()没有方法保存... 我该如何解决这个问题..?

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    您在创建模型对象时缺少架构对象参数。 这样做:

    var users_model = mongoose.model("Users", YourSchemaObject);
    var User_Document = new user_model();
    User_Document.field_name = 'value'; //here you can access getter/setter/methods
    User_Document.save();
    

    【讨论】:

    • 我正在使用构造来创建对象...^_^
    【解决方案2】:

    你打电话给users.save();,但是users是一个模型

    save 方法可用于模型实例,例如:

    var mongoose = require('mongoose')
      , models = require('./models/schema');
    
    var db = mongoose.connect("mongodb://localhost/vynchat")
      , Users = mongoose.model("Users");
    
    
    var user = new User({
          "your": "data"
        });
    
    user.save(function (err, model) {
      if (err) throw err;
    
      console.log("My new User is saved",
        "`save` hook worked as espected since we had no errors here");
    });
    

    您应该阅读 node.js modules API 并仔细阅读 mongoose API

    附带说明:当您第一次在代码节点中require('mongoose') 会给您一个猫鼬连接器的实例时,后续要求将产生相同的对象。

    【讨论】:

    • 我之前已经修复了我的代码,但新问题是我可以从架构文件Users.methods.getId = function(models,id){ models.findById( id, function (err, found) { return found.username; }); } 上的方法中获得返回,并且在我的 app.js 中我放置了此代码 var conn = mongoose.createConnection('mongodb://localhost/vynchat'); var Users = conn.model('Users', Users); var m = new Users(); console.log(m.getId(Users,"4f50914da314c150cf000001"));结果未定义,但如果我在文件模式中是console.log(found.username),则结果为真;我该如何解决..
    • getId 正在执行异步任务 (models.findById),然后尝试使用 return 返回结果。这就是发明回调的原因。见this post
    猜你喜欢
    • 2017-08-18
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 2016-04-25
    相关资源
    最近更新 更多