【问题标题】:How do I reference a schema inside another schema with Mongo, NodeJS, and Angular?如何使用 Mongo、NodeJS 和 Angular 在另一个模式中引用模式?
【发布时间】:2016-06-09 04:02:47
【问题描述】:

我正在构建一个 MEANjs 应用程序,我有两个架构:用户和声明。我希望能够从声明中引用用户信息。

现在我可以使用表达式 {{vm.claim.user.displayName}} 成功访问视图中的显示名称。如何访问嵌入式用户架构的其他属性?

例如,我希望能够引用用户的名字和姓氏。在我看来,像 {{vm.claim.user.firstName}} 这样的东西不会产生任何结果。

user.server.model.js

/**
 * User Schema
 */
var UserSchema = new Schema({
  firstName: {
    type: String,
    trim: true,
    default: '',
    validate: [validateLocalStrategyProperty, 'Please fill in your first name']
  },
  lastName: {
    type: String,
    trim: true,
    default: '',
    validate: [validateLocalStrategyProperty, 'Please fill in your last name']
  },
  displayName: {
    type: String,
    trim: true
  }
});

mongoose.model('User', UserSchema);

claim.server.model.js

'use strict';

/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
  Schema = mongoose.Schema;

/**
 * Claim Schema
*/
var ClaimSchema = new Schema({
  description: {
    type: String,
    default: '',
    required: 'Please fill Claim description',
    trim: true
  }, 
  created: {
    type: Date,
    default: Date.now
  },
  user: {
    type: Schema.Types.ObjectID,
    ref: 'User'
  }
});

mongoose.model('Claim', ClaimSchema);

【问题讨论】:

    标签: angularjs node.js mongodb


    【解决方案1】:

    如果你想在Claim 模式中使用User 模式,你可以这样做:

    /**
    * Module dependencies.
    */
    var mongoose = require('mongoose'),
      Schema = mongoose.Schema,
      User = require('./../models/user'); //proper path here
    
    var UserSchema = require('mongoose').model('User').schema;
    
    /**
     * Claim Schema
    */
    var ClaimSchema = new Schema({
      description: {
        type: String,
        default: '',
        required: 'Please fill Claim description',
        trim: true
      }, 
      created: {
        type: Date,
        default: Date.now
      },
      user: {
        type: UserSchema,
        ref: 'User'
      }
    });
    
    mongoose.model('Claim', ClaimSchema);
    

    User 架构需要导出语句。将mongoose.model('User', UserSchema); 替换为:

    exports.UserSchema = UserSchema;
    module.exports = mongoose.model('User', UserSchema);
    

    关于依赖项中正确路径的问题,'./../models/user' 应该可以解决

    ├── server
    |   ├── models
    |   |   └──user.server.model.js
    |   └── server.js
    

    【讨论】:

    • 这看起来很棒 - 我现在在定义用户模型的路径时遇到了麻烦,您在这里评论了 //proper path。我需要在 user.server.model.js 中做某种 module.exports 语句吗?
    • 你的文件夹结构是什么(我的意思是 server.js 和模型文件的一部分)?
    • 是的,需要导出声明。我会更新答案。
    • user,server.model.js 中有var mongoose = require('mongoose'), Schema = mongoose.Schema; 吗?
    • 还有一件事:当你向Claim 添加某个依赖项时,你需要先向User 添加依赖项。
    猜你喜欢
    • 2014-10-23
    • 2015-05-18
    • 1970-01-01
    • 2017-06-09
    • 2013-08-02
    • 1970-01-01
    • 2021-08-17
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多