肯定有一些方法可以在更少的代码行中完成这项工作。
数据库不是我最强的,我是sequelize和node的新手。用户ID作为参数进入,我必须检查用户表中是否有用户。如果没有用户只是发回没有用户,否则检查图片表以查看用户是否有图片。 userid是pics表中的forign键。如果用户没有pic我给他们一个默认的其他方面我将他们的pic设置为数据库中存储的pic。我有它工作,但我知道它可以用更少的代码行编写得更好使用findAll和include但我无法得到它。任何帮助赞赏。这是有效的代码..
users.findById(userId)
.then(function (user) {
if (!user) {
res.render('error', {
message: 'No user found with id of ' + userId,
error: {
status: 404
}
});
} else {
pics.findOne({
where: {
user_id: userId
},
attributes: ['profile_pic_filename']
}).then(function (pic) {
if (!pic) {
//if no pic give a default
profilepic = process.env.DEFAULT_PROFILE_PIC;
} else {
profilepic = CDNPath + pic.profile_pic_filename;
}
res.render('user', {
profilePic: profilepic,
firstname: user['first_name'],
username: user['username'],
surname: user['surname'],
email: user['email']}
);
});
}
});
答案 0 :(得分:0)
肯定有一些方法可以在更少的代码行中完成这项工作。
如果你缩小它,你可以将它全部放在一行:D!
开玩笑......
.findOne
函数返回 promise 。
与回调不同,使用promsies,如果抛出错误,它将被accomanying catch 函数捕获。您需要做的就是将错误放在catch中,而不必担心第一次查询。
pics.findOne({ where: { user_id: userId }, attributes: ['profile_pic_filename']})
.then(pic => {
var profilepic = process.env.DEFAULT_PROFILE_PIC;
if (pic) profilepic = CDNPath + pic.profile_pic_filename;
res.render('user', {
profilePic: profilepic,
firstname: user['first_name'],
username: user['username'],
surname: user['surname'],
email: user['email']}
);
})
.catch(e => {
// test the error is what you were expecting.
return res.render('error',
{ message: 'No user found with id of ' + userId, error: { status: 404 }});
});