Validation Sails.js和Waterline:通过DB请求进行动态验证
我使用Sails 11.1和Waterline 2.11.2以及MongoDB数据库 我想使用validator for 1属性中的Validation Sails.js和Waterline:通过DB请求进行动态验证,validation,sails.js,waterline,Validation,Sails.js,Waterline,我使用Sails 11.1和Waterline 2.11.2以及MongoDB数据库 我想使用validator for 1属性中的,验证插入到“Article”模型中的数据。 以前,我使用生命周期回调(尤其是beforeCreate和beforeUpdate)进行工作,但它会生成双重代码 这里有一个模型,被截断的只是有问题的属性: module.exports = { schema: true, autoCreatedAt: false, autoUpdatedAt:
,验证插入到“Article”模型中的数据。
以前,我使用生命周期回调(尤其是beforeCreate
和beforeUpdate
)进行工作,但它会生成双重代码
这里有一个模型,被截断的只是有问题的属性:
module.exports =
{
schema: true,
autoCreatedAt: false,
autoUpdatedAt: false,
attributes:
{
theme:
{
model: 'Theme',
required: true
}
}
}
我知道如何静态地定义它:
in: ['something', 'something other']
我知道如何调用我在constants.js
文件中定义的常量:
defaultsTo: function ()
{
return String(sails.config.constants.articleDefaultTheme);
}
但是我想在数据库中获取所有主题,以便在
验证中具有动态的。所以,我写了这个:
theme:
{
model: 'Theme',
required: true,
in: function ()
{
Theme.find()
.exec(function (err, themes)
{
if (err)
{
return next({ error: 'DB error' });
}
else if (themes.length === 0)
{
return next({ error: 'themes not found' });
}
else
{
var theme_ids = [];
themes.forEach(function (theme, i)
{
theme_ids[i] = theme.theme_id;
});
return theme_ids;
}
});
}
}
但它不起作用,我总是出现“1属性无效”错误。如果我以静态方式编写它们,或者如果我使用另一个DB请求签入beforeCreate
方法,那么它工作正常。
如果我sails.log()
返回变量,那么所有主题ID都在这里
我尝试了JSON.stringify()
返回的变量,还尝试了JSON.parse(JSON.stringify())
it。我还尝试使用string()
函数将theme.theme\u id
转换为一个字符串,但除此之外
我做错了什么?还是一只虫子
你也可以在这里检查我的问题:模型在你的属性
范围内的配置当然会抛出一个错误,因为它不应该使用函数,特别是你的函数不返回任何东西,如果你强迫它返回一些东西,它将返回Promise
,即Theme.find()
尝试使用不同的方法。存在着许多问题。您可以使用beforeCreate
或beforeValidate
之类的方法手动检查动态主题
,如果无效,则返回错误
或者,如果可以使用标准的DB关系,只需使用简单的DB关系即可。它不应该使用函数?你确定吗,当我使用函数获取常数时,它们工作得很好?关于生命周期回调,我忘了在想到像这样在
中使用属性之前提到我正在使用它们。把它加到我原来的问题上。“或者,如果使用标准DB关系可以实现,那么只需使用简单的DB关系即可。”:当我使用MongoDB时,我如何使用Sails实现这一点(也添加到我原来的问题中,对不起…)?如果它可以是一个函数,我很抱歉。但它应该返回一个表示字段配置的对象,而不是promise。因为承诺作用域/回调/任何异步作用域都不是同步的,所以它不能用于定义配置字段。