javascript - 检查用户是否在 node.js 中的 postgresql 中(异步)
问题描述
我编写了以下代码来检查我的数据库(PostgreSQL)中是否存在用户,并使用该 id 来检查我的终端,它确实找到了具有该 id 的用户。但是这里它告诉我userAuthentication函数中checkUser的结果是undefined。有谁可以帮我解决这个问题?谢谢!
function checkUser(userId){
let SQL = 'SELECT * FROM Users WHERE github_id=$1;';
console.log('this is the userid from checkUser', userId);
let values = [userId];
client.query(SQL,values)
.then(result => {
console.log('here is the user from SQL',result.rows[0]);
return result.rows[0];
})
.catch(err => {console.log(err)});
}
function userAuthentication(user_data, token){
return checkUser(user_data.id)
.then(user => {
console.log('within user authentication user from checking', user);
if(user !== undefined){
console.log('xxxx have user within authentication', user.token);
let SQL = 'UPDATE Users SET token = $1 WHERE token=$2;';
let values = [token, user.token];
client.query(SQL,values)
.then(result => {
console.log('here is the user with new token',result);
return result;
})
.catch(err => {console.log(err)});
}else{
console.log('xxx get in creating new user');
createUser(user_data,token);
}
})
.catch(err => {console.log(`Something wrong with userAuthentication ${err}`)});
}
function createUser(user_data,user_token) {
const newUser = new User({
token: user_token,
github_username: user_data.login,
github_id: user_data.id,
github_url: user_data.url,
avatar_url: user_data.avatar_url,
gravatar_url: user_data.gravatar_id
});
console.log('XXXX this is the new user created', newUser);
// save user to sql
let SQL = 'INSERT INTO users (token, experience_lvl, position, github_username, github_id, github_url, avatar_url, gravatar_url, last_login, is_superuser, username, first_name, last_name, email, is_active, date_joined) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16) RETURNING id;';
let values = [newUser.token, newUser.experience_lvl, newUser.position, newUser.github_username, newUser.github_id, newUser.github_url, newUser.avatar_url, newUser.gravatar_url, newUser.last_login, newUser.is_superuser, newUser.username, newUser.first_name, newUser.last_name, newUser.email, newUser.is_active, newUser.date_joined];
// console.log("the query", SQL);
client.query(SQL, values)
.then(result => console.log('XXXX got in sql saving', result))
.catch(err => console.log(err));
}
解决方案
您应该从checkUser
函数返回一个承诺:
function checkUser(userId){
const SQL = 'SELECT * FROM Users WHERE github_id=$1;';
console.log('this is the userid from checkUser', userId);
const values = [userId];
return client.query(SQL,values)
.then(result => {
console.log('here is the user from SQL', result.rows[0]);
return result.rows[0];
})
.catch(err => {console.log(err)});
}
我自己没有检查此解决方案,请检查。从逻辑上讲,它应该工作。
推荐阅读
- javascript - 从 ID 数组中获取数据的正确方法?
- javascript - Photoshop Extendscript - 文件被锁定 - 无法保存
- discord.js - 如何创建 discord.js ping 命令?
- javascript - 如何使用 React 从 localStorage 读取多个键?
- css - 使用 css 制定屏幕尺寸规则或根据屏幕尺寸渲染组件?
- java - 图集上的 Heroku Spring boot + Mongo DB
- java - Groovy:如何模拟导入的类及其方法
- javascript - 为什么我在 css 中对我的背景图像做出反应时出错
- excel - 如何使用带有溢出的getElementsByTagName获取特定值:在VBA上隐藏?
- json - 正则表达式用 _ 替换引用字符串中的空格(崇高)