MEANjs:在另一个crud模块之上的一个crud模块而不是用户模块

时间:2014-11-11 08:51:25

标签: angularjs node.js meanjs

我正在使用MEAN.js应用程序,并且我使用Yo生成器创建了一堆crud-module。我创建的所有新crud模块都链接到主用户模块,这是有意义的,虽然我想有一个称为' flats'链接到用户模块

和我创建的其他crud模块,例如:'浴室'房间'等应该与平面相关联#39;所以我们说在登录后,在我的右上角下拉列表中,我看到我创建的Flats列表,当我点击任何一个,然后是浴室'和'房间'顶栏中的菜单项应取决于在该平面下创建的房间和浴室

好奇,我将如何实现上述目标?

1 个答案:

答案 0 :(得分:1)

答案从为实体建模开始,这放在您的mongoose模式中,您对实体进行建模的方式可能会有所不同,因此您应该阅读有关mongodb data modelingmongoose模式,模型,人口的更多信息。

基本上你会有3个型号(Flat,Room,Bathroom), Room 实体应该引用 Flat 浴室还应该参考 Flat

要在meanjs中实现这一目标,您应该拥有: app \ models 下的3个文件(flat.server.model.js,room.server.model.js,bathroom.server.model.js) ,每个文件都包含该实体的mongoose模式,因此room.server.model.js将具有mongoose模式,如:

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

var RoomSchema = new Schema({       
    name: String,
    order: {
        type: Number
    },
    _flat:{
        type:String,
        ref:'Flat' //refers to the Flat model, should be populated with _id of the Flat entity
    }
});

现在,在创建新的Room实体时,您应该添加公寓的_id,如下所示:

var room=new Room({name: 'living', _flat:'123165464' /*_id of a flat entity*/});
//or:
 var room=new Room();
room._flat='123165464'; //_id of a flat entity

要检索平面房间,您应该在服务器控制器(app \ controllers \ room.server.controller.js)中有一个功能,查询mongodb以获取特定的房间 持平,有点像:

exports.roomsByFlat= function(req, res) {Room.find({'_flat':'35415453'/*_id of a flat entity*/}).exec(function(err, rooms) {
        if (err) {
            return res.status(400).send({
                message: errorHandler.getErrorMessage(err)
            });
        } else {
            res.jsonp(rooms);
    }
    });
};

但是这个函数有flat._id静态,所以我们必须将flat._id传递给它,我知道有两种方法,一种是定义一个带有参数的路径来保持flat._id,另一种 是在查询字符串中传递它。检查此post的答案,看看你如何做到这两点。

请注意,这是一种做事方式,还有其他方法,可以让您的 Flat 文件(实体)包含所有房间浴室文档(实体),我鼓励您进一步阅读mongodb数据建模,找出最适合您的方法。