基本上,我想在数据库中存储一个user
,在执行此操作之前,我需要验证该user
的字段。所以我有这个结构:
exports.save = function(req, res)
{
let errors = validate(req.body);
if(!errors.length)
{
//add user
res.status(200).send(true);
}
else{
res.status(500).send("oh bad");
}
};
function validate(user)
{
let errors = [];
if (User.findOne({ email: user.email })) {
errors.push({ msg: 'Email already registered!' });
}
}
上面的代码根本无法工作,因为NodeJS
处理异步操作。我可以通过以下方式解决此“问题”:
User.findOne({ email: email }).then(user => {
if (!user) {
//add user
res.status(200).send(true);
});
但是我想在功能validate
中添加检查,有没有办法做到这一点?抱歉,这个问题可能很愚蠢,但我是NodeJS
答案 0 :(得分:1)
由于没有本质上使exports.save
同步的特性,所以使validate
异步可能最容易(而且我们也可以通过使用promise和async
使之变得现代)。
exports.save = async function(req, res) {
const errors = await validate(req.body);
if (!errors.length) {
//add user
res.status(200).send(true);
} else {
res.status(500).send("oh bad");
}
};
async function validate(body) {
const errors = [];
const user = await User.findOne({ email: body.email });
if (user) {
errors.push({ msg: "Email already registered!" });
}
return errors;
}