我正在使用pg
和node.js
。当用户使用auth0
小部件登录时,我传递它返回的电子邮件并检查我的数据库以查看用户是否存在。如果用户不存在,我将它们插入到数据库中。我已经设法使这个工作与一个函数的黑客工作,但我会感谢一些帮助熨烫出来。处理Postgres错误消息以执行正确查询
我正面临的问题。
当检查数据库的电子邮件时,它没有检查整个电子邮件地址。
var emailCheck = "SELECT id from public.user WHERE email=" + req.body.email;
req.body.email;
实际上是[email protected]
返回此错误,
column "myemail" does not exist
即使
[email protected]
确实存在。
无论它抛出的错误如何,它都会插入电子邮件地址。如果它不存在,则插入它。由于是在它抛出一个错误的电子邮件的唯一密钥
重复键值违反唯一约束“uk_user_email”
因此,要解决这个问题,我的问题是为什么不检查的@符号后?我应该遵循什么逻辑来改变这个函数来运行第一个查询,并且只有在第一个查询没有找到有问题的电子邮件地址时才运行第二个查询?
checkRegister: function(req, res) {
pool.connect(function(err, client, done) {
if (err) {
return console.error('error fetching client from pool', err);
} connection
var emailCheck = "SELECT id from public.user WHERE email=" + req.body.email;
var emailInsert = "insert into public.user (user_auth_level,email,account_locked,contract) " +
"values ('1','" + req.body.email + "','false','false')"
client.query(emailCheck, function(err, result) {
if (err) {
return console.error(err.message);
}
});
client.query(emailInsert, function(err, result) {
if (err) {
return console.error(err.message);
}
});
done();
});
pool.on('error', function(err, client) {
console.error('idle client error', err.message, err.stack)
});
}
谢谢。这是超级有用的。超越和超越。 – wuno
我的另一个2分,总是更好地使用准备语句,而不是concat查询字符串更好的安全性和控制,如自动转义和数据类型检测。请参阅我上面更新的回答 – Simon
谢谢我一直在阅读关于此的2小时。 – wuno