【发布时间】:2020-02-21 18:59:09
【问题描述】:
我有一个存储库,我直接连接到我的模型以插入一些数据,它成功创建了数据,但是当我将控制器连接到这个存储库时,我得到一个空响应,如果我将它记录到存储库本身我得到承诺 。请在下面查看我的代码:-
Repository.js
exports.register = (request) => {
const data = UserModel.findOne({email: request.email})
.then(user => {
if(user)
{
return {status: 400, message: 'Email Already exist'}
} else {
return bcrypt.genSalt(10, (err, salt) => {
const newUser = new UserModel({
username: request.username,
email: request.email,
password: request.password
});
return bcrypt.hash(newUser.password, salt, async (err, hash) => {
if(err) throw err;
newUser.password = hash;
return newUser.save()
.then(user => {
const token = jwt.sign({id: user._id}, process.env.JWT_SECRET, {
expiresIn: 86400 // expires in 24 hours
});
return {status: 200, message: 'Successfully Registered', auth: true, token: token, user: user}
})
.catch(err => {
return {status: 400, message: err}
})
})
})
}
})
console.log(data) // This part is return Promise <pending>
return data;
};
Controller.js
exports.SeedRegisteration = async (req, res, next) => {
try {
let element = await userRepo.register({username: "Testin", email: "Testin@test.com", "password":
"joe" });
return await res.status(200).json({ status: 200, data: element })
} catch (e) {
return res.status(400).json({ status: 400, message: e.message });
}
};
工作正常,但不返回数据
【问题讨论】:
-
你的exports.register 函数没有返回任何东西——哦,抱歉,它可能有......奇怪的格式
-
看到这个
return bcrypt.hash(newUser.password, salt, async function (err, hash) {没有返回你希望的结果,你需要保证 -
bcrypt.genSalt(10, (err, salt) =>也需要承诺 -
即使我删除了 bcrypt 功能,问题仍然存在
-
实际上 - bcrypt 确实有“承诺”版本 - 你只需要使用那些
标签: javascript node.js mongodb express mongoose