如何通过表单从Mongoose模式访问对象?

时间:2018-12-02 17:27:15

标签: node.js mongodb mongoose

我有这个猫鼬模式:

var mongoose = require("mongoose"), 
    passportLocalMongoose = require("passport-local-mongoose");

let userSchema = new mongoose.Schema({
    username:
    {type: String,
    unique: true
    },
    password: String,
    privileges:
    {
        region: [Number],
        read: [Boolean],
        write: [Boolean],
        edit: [Boolean],
        delete: [Boolean]
    }
});

userSchema.plugin(passportLocalMongoose);

module.exports = mongoose.model("User", userSchema);

并且我以以下形式使用它:

<form action="/register" method="POST">
    <input type="text" name="username"><br/>
    <input type="password" name="password"><br/>
    <input type="text" name="privileges.region"><br/>
    <input type="text" name="privileges.read"><br/>
    <input type="text" name="privileges.write"><br/>
    <input type="text" name="privileges.edit"><br/>
    <input type="text" name="privileges.delete"><br/>
    <button>Submit</button>
</form>

我想这个名字是可以的,因为特权是一个对象,因此每个属性都应使用点符号来访问。如果不是,请告诉我。

req.body看起来像这样:

enter image description here

当我尝试console.log(req.body.privileges.region)或任何其他属性时,我无法定义。我应该如何访问特权对象属性之一?谢谢。

1 个答案:

答案 0 :(得分:1)

请求返回的字典的键实际上是字符串:“ privileges.region”,“ privileges.delete”等。因此,您必须以

的方式访问它们
req.body['privileges.region']

人们通常会编写一个辅助函数来处理这种表示法,以将其映射回其原始模型。或者,他们可能会在浏览器中提交表单时进行映射,以获取您真正想要的形状的数据:

{username
permissions:{region, ...}
...
}