我想在插入数据库之前验证数据。 Feathersjs的方法是使用钩子。在插入一组权限之前,我必须考虑用户帖子提供的数据的完整性。我的解决方案是找到与用户提供的数据相关的所有权限。通过比较列表的长度,我可以证明数据是否正确。挂钩的代码如下所示:
const permissionModel = require('./../../models/user-group.model');
module.exports = function (options = {}) {
return function usergroupBefore(hook) {
function fnCreateGroup(data, params) {
let inIds = [];
// the code in this block is for populating the inIds array
if (inIds.length === 0) {
throw Error('You must provide the permission List');
}
//now the use of a sequalize promise for searching a list of
// objects associated to the above list
permissionModel(hook.app).findAll({
where: {
id: {
$in: inIds
}
}
}).then(function (plist) {
if (plist.length !== inIds.length) {
throw Error('You must provide the permission List');
} else {
hook.data.inIds = inIds;
return Promise.resolve(hook);
}
}, function (err) {
throw err;
});
}
return fnCreateGroup(hook.data);
};
};
我评论了处理其他参数的某些信息以填充
inIds
数组的行。我还对与存储在数组中的信息相关联的对象使用了sequalize搜索。then
块内的该块在后台执行。在feathersjs控制台上显示结果但是,数据已插入数据库中。
如何从feathersjs挂钩中执行的promise返回数据?
最佳答案
您的fnCreateGroup
没有返回任何内容。您必须return permissionModel(hook.app).findAll
。另外,如果您使用的是Node 8 +,async/await将使操作变得更容易:
const permissionModel = require('./../../models/user-group.model');
module.exports = function (options = {}) {
return async function usergroupBefore(hook) {
let inIds = [];
// the code in this block is for populating the inIds array
if (inIds.length === 0) {
throw Error('You must provide the permission List');
}
//now the use of a sequalize promise for searching a list of
// objects associated to the above list
const plist = await permissionModel(hook.app).findAll({
where: {
id: {
$in: inIds
}
}
});
if (plist.length !== inIds.length) {
throw Error('You must provide the permission List');
} else {
hook.data.inIds = inIds;
}
return hook;
};
};