gpt4 book ai didi

node.js - 自定义模型验证器 SailsJS

转载 作者:太空宇宙 更新时间:2023-11-03 21:59:30 24 4
gpt4 key购买 nike

当使用自定义模型验证器检查模型中的记录时。价差内的返回似乎并没有结束控制流程。

//Post.js Model  

/**
* Custom Validator
**/
types: {
isUserValid: function(user_id) {
var Promise = require('bluebird');

Promise.all([
User.findOne({id: user_id})
])
.spread(function(user) {
console.log(user);
if (user === null || user === undefined) {
console.log('failed');
return false;
}else{
console.log('passed');
return true;
}
});
}
},

我的响应是标准验证失败响应。

{
"error": "E_VALIDATION",
"status": 400,
"summary": "1 attribute is invalid",
"model": "Post",
"invalidAttributes": {
"owner": [
{
"rule": "isUserValid",
"message": "\"isUserValid\" validation rule failed for input: 1"
}
]
}
}

最佳答案

看起来您希望“return true 和 return false”作为 isUserValid 函数的返回值。但事实上这并不是 javascript 作用域的工作方式。扩展函数中的 return 语句 return true 仅意味着 promise 以“true”解决。它不会作为函数返回。函数 isUserValid 仍然没有返回任何内容。如果这个函数可以是一个异步 promise 。你至少应该返回 promise 。

return Promise.all([....]).spread.....

事实上它可以简化

return User.findOne(user_id).then(function(u){....})

但是,如果此函数不支持 Promise,则意味着它是同步的,并且期望返回 true/false,而不是 Promise 对象。你必须使这个过程同步。将 Promise 转换为同步的一种方法是使用生成器函数。请参阅here

关于node.js - 自定义模型验证器 SailsJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30829249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com