Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用虚拟方法从mongoose模式获取枚举值?_Node.js_Mongodb_Enums_Mongoose - Fatal编程技术网

Node.js 如何使用虚拟方法从mongoose模式获取枚举值?

Node.js 如何使用虚拟方法从mongoose模式获取枚举值?,node.js,mongodb,enums,mongoose,Node.js,Mongodb,Enums,Mongoose,我很难在同一模式上使用虚拟方法从Mongoose模式中获取枚举值 我试图在架构中访问的属性定义如下: , roles: { type: [{ type: String , enum: ['user', 'admin'] }] , default: ['user'] } 以下是我用来获取枚举值的虚拟方法: // Returns an array of all possible role enum values UserSchema.virt

我很难在同一模式上使用虚拟方法从Mongoose模式中获取枚举值

我试图在架构中访问的属性定义如下:

, roles: {
    type: [{
        type: String
        , enum: ['user', 'admin']
    }]
    , default: ['user']
}
以下是我用来获取枚举值的虚拟方法:

// Returns an array of all possible role enum values
UserSchema.virtual('possibleRoles').get(function() {
    return this.schema.path('roles').caster.enumValues;
});
这是可行的,但我在网上找到的其他例子却以不同的方式进行了讨论。这方面的一个例子如下:


我访问属性上枚举的方法是否脏或不正确?有没有一种更干净的方法可以让我写这篇文章?

这是一种干净而简单的方法

var possibleRoles = ['user', 'admin'];

var UserSchema = new Schema({
    roles: {
        type: [{type: String, enum: possibleRoles}],
        default: ['user']
    }
});

UserSchema.virtual('possibleRoles').get(function () {
    return possibleRoles;
});

这是一种干净简单的方法

var possibleRoles = ['user', 'admin'];

var UserSchema = new Schema({
    roles: {
        type: [{type: String, enum: possibleRoles}],
        default: ['user']
    }
});

UserSchema.virtual('possibleRoles').get(function () {
    return possibleRoles;
});

拆下脚轮部分,我不知道为什么会出现:

返回此.schema.path('roles').enumValues;

这应该可以在没有任何其他问题的情况下工作

拆下主销后倾角部件,我不知道为什么会出现这种情况:

返回此.schema.path('roles').enumValues;

这应该没有任何其他问题

这是最干净的方法。但是,如果我想将数组保持在模式定义内,那么我访问它的方式是否正确?谢谢。您可以在角色类型为字符串时访问,并为其设置枚举值。然后在虚拟方法中返回这个.schema.path('roles').enumValues;这是最干净的方法。但是,如果我想将数组保持在模式定义内,那么我访问它的方式是否正确?谢谢。您可以在角色类型为字符串时访问,并为其设置枚举值。然后在虚拟方法中返回这个.schema.path('roles').enumValues;