Javascript “路径上的值1,1转换为数字失败”

Javascript “路径上的值1,1转换为数字失败”,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在尝试构建一个具有某些权限的用户模型 架构如下所示: var mongoose=requiremongoose, passportLocalMongoose=requirePassportLocalMongoose; 让userSchema=newmongoose.Schema{ 用户名: {type:String, 独一无二:真的 }, 密码:String, 特权: [{ 区域:{type:Number,unique:true}, 改为:编号, 写:数字, 编辑:编号 }] }; use

我正在尝试构建一个具有某些权限的用户模型

架构如下所示:

var mongoose=requiremongoose, passportLocalMongoose=requirePassportLocalMongoose; 让userSchema=newmongoose.Schema{ 用户名: {type:String, 独一无二:真的 }, 密码:String, 特权: [{ 区域:{type:Number,unique:true}, 改为:编号, 写:数字, 编辑:编号 }] }; userSchema.pluginpassportLocalMongoose; module.exports=mongoose.modelUser,userSchema 在为用户定义的模式中,特权是具有此模式的子文档数组

{
    region: { type: Number, unique: true },
    read: Number,
    write: Number,
    edit: Number
}
设置此字段时,提供的数据需要与该架构匹配。e、 g

我假设特权的设计是有目的地以这种方式进行的,以允许用户拥有许多特权

设置权限的一种简单方法是适当地设计表单。表单字段允许设置多个权限。例如,要设置两个权限,可以通过以下方式编写标记来实现:

<input type="text" name="privileges[0][region]"><br/>
<input type="text" name="privileges[0][read]"><br/>
<input type="text" name="privileges[0][write]"><br/>
<input type="text" name="privileges[0][edit]"><br/>
<input type="text" name="privileges[0][delete]"><br/>

<input type="text" name="privileges[1][region]"><br/>
<input type="text" name="privileges[1][read]"><br/>
<input type="text" name="privileges[1][write]"><br/>
<input type="text" name="privileges[1][edit]"><br/>
<input type="text" name="privileges[1][delete]"><br/>
这样你就可以简单地写了

new User({
  username: req.body.username, 
  privileges: req.body.privileges
})
确保客户机传递正确的数据比事后处理数据更简单

以这种方式设计表单的限制意味着必须提前确定用户可以拥有的权限数量。解决这个问题的一个方法是动态构建表单,并根据具体情况控制用户添加更多权限。请参见以下示例了解如何进行此操作:

函数addPrivilegee{ e、 防止违约; const privileges=$'.privileges'; const lastCount=privileges.length; console.log$this.data'template'。替换/:x:/g,lastCount 常量模板=$this.data'template'。替换:x:',lastCount; 特权。在$.appendtemplate之后 } $document.readyfunction{ $addPrivilegeBtn.“单击”时,添加特权; }; .特权{ 背景:ccc; 填充:8px 16px; 保证金:4px0; } 添加特权
但为什么它只发生在编辑中?我敢打赌,这在其他领域都会发生。我想这些字段可能是根据字典进行验证的。我尝试将输入类型更改为数字,但之后我无法再输入数组。在模式中,priviledges被定义为字段数组;我没有在加价中看到这一点;这是一个对象,因此我对这个很陌生。如果特权[region]不正确,我应该如何通过标记访问它?我测试了它,它正常工作。但我并没有真正理解这一点:标记中的特权[0][region]。它不应该是特权[0].region,因为[0]是数组,.region基本上是对象的属性吗?。不过,谢谢你的回答,它正在工作,我只是不明白。我认为格式是name[field][field],其中,当field是整数时,它被视为数组项。如果字段是字母数字,则将其视为对象中的键。当为另一个表单输入设置相同的名称值时,将在数组中收集为这些输入输入的值。有一个相当过时的规格。非常感谢您的时间!
{ privileges:
  [ { region: '1', read: '2', write: '2', edit: '2', delete: '4' },
    { region: '2', read: '4', write: '4', edit: '4', delete: '4' } ] }
new User({
  username: req.body.username, 
  privileges: req.body.privileges
})