Node.js SailsJS:provent Model.create()如果有未声明的属性

Node.js SailsJS:provent Model.create()如果有未声明的属性,node.js,mongodb,sails.js,waterline,sails-mongo,Node.js,Mongodb,Sails.js,Waterline,Sails Mongo,如果实体包含未在api/models/YourModel中声明的属性,是否有方法阻止实体创建 例如,假设我使用了MongoDB,我有一个User模型: module.exports = { attributes: { name:{type:'string'}, age:{type:'number'} } }; 我尝试使用此代码创建: User.create({name:'Walter Jr',age:8,missingTest:'something'}).exec(fu

如果实体包含未在api/models/YourModel中声明的属性,是否有方法阻止实体创建

例如,假设我使用了MongoDB,我有一个
User
模型:

module.exports = {
  attributes: {
    name:{type:'string'},
    age:{type:'number'}
  }
};
我尝试使用此代码创建:

User.create({name:'Walter Jr',age:8,missingTest:'something'}).exec(function createCB(err,created){
  console.log('should fail');
});
另外,如果一个模型与另一个模型有关系/关联,那么如果实体id指向无效的实体,创建不也应该失败吗


也许我在验证过程中遗漏了一些东西,但到目前为止,这种行为对我来说似乎有点奇怪,如果waterline有复合主键支持也会很好。

您可以尝试将
schema:true
放在config/models.js下

医生说:

在支持无模式数据结构的数据库中切换无模式或模式模式的标志。如果禁用,这将允许您在记录中存储任意数据。如果启用,则仅存储在模型的attributes对象中定义的属性。 对于不需要模式的适配器,如Mongo或Redis,默认设置为schema:false


听起来不错,但我试图在
config/models.js
中编写
schema:true
,但没有任何效果,奇怪。您是否尝试先清除数据库,然后重新启动服务器?我设置了
migrate:'drop'
,尝试重新启动
mongod
,创建时还没有返回错误,在日志中还可以看到数据库实际上已删除。如图所示,它忽略缺少的属性,而不是传递错误参数。因此,它的工作方式虽然不完全符合我的预期。如果你想抛出一个错误,你可以为每个模型覆盖该方法,然后手动验证和检查你的模型。