帆.JS关联验证



我在 Sails 中使用了几个一对多的关联.JS如下所示:

用户

email: {
    type: 'string',
    required: true,
    unique: true
},
projects: {
    collection: 'project',
    via: 'user'
}

项目

name: {
    type: 'string',
    required: true,
    minLength: 3,
    maxLength: 50
},
user: {
    model: 'user',
    required: true
},
sites: {
    collection: 'site',
    via: 'project'
}

网站

project: {
    model: 'project',
    required: true
},
name: {
    type: 'string',
    required: true
}

现在,当我向/project 发出 POST 请求时,它会很好地创建项目,并且指定参数"用户"(取自会话)会将项目与该特定用户相关联。

当我创建一个新网站时也是如此。但是,我似乎可以为参数"项目"指定任何数字,即使该特定项目 ID 不存在。实际上,如果项目不存在并且不创建站点,则验证应该失败。我以为它会查找与项目的关联并检查指定的项目 ID 是否有效?

此外,我只希望能够创建一个与属于当前用户的项目关联的网站。我将如何做到这一点?

提前谢谢。

我不确定这是不存在的项目 ID 关联的错误还是预期行为,但一种解决方法是在模型中有一个beforeCreate钩子来验证项目 ID 是否存在:

// In your Site model
beforeCreate: function(values, next) {
  ...
  var projectID = values['project'];
  Project.findOne(projectID, function (err, project) {
    if (err || !project) return next("some error message");
    return next();
  });
}

您还可以在第二个问题的beforeCreate钩子中进行检查:

// In your Site model
beforeCreate: function(values, next) {
  ...
  var projectID = values['project'];
  Project.findOne(projectID).populate('user').exec(function (err, project) {
    if (err || !project) return next("some error message");
    if (project.user.id != values['userID']) return next("some other error message");
    return next();
  });
}

请注意,您必须将"userID"作为参数传递到用于创建站点实例的参数中。

相关内容

  • 没有找到相关文章

最新更新