我有这个猫鼬模式:
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看起来像这样:
当我尝试console.log(req.body.privileges.region)或任何其他属性时,我无法定义。我应该如何访问特权对象属性之一?谢谢。
答案 0 :(得分:1)
请求返回的字典的键实际上是字符串:“ privileges.region”,“ privileges.delete”等。因此,您必须以
的方式访问它们req.body['privileges.region']
人们通常会编写一个辅助函数来处理这种表示法,以将其映射回其原始模型。或者,他们可能会在浏览器中提交表单时进行映射,以获取您真正想要的形状的数据:
{username
permissions:{region, ...}
...
}