使用Node连接到PostgreSQL数据库并发出POST请求。数据库本身已连接(使用一些简单的GET请求进行测试)。但似乎由于某种原因,在运行我的注册函数时没有定义客户端。
下面是连接数据库的代码;
import pg from "pg";
const client = new pg.Client({
host: 'localhost',
user: 'stephen',
port: 5433,
database: "ecommerceapp"
});
client.connect();
client.query(`SELECT * FROM customer`, (err, res) => {
if(!err) {
console.log(res.rows);
} else {
console.log(err.message);
}
client.end;
});
这是我的用户注册函数
const bcrypt = require("bcrypt");
const jwt = require("jsonwebtoken");
const { client } = import("../db/index.mjs");
exports.register = async (req, res) => {
const { name, email, password} = req.body;
try {
const data = await client.query(`SELECT * FROM customer WHERE email=$1`, [email]);
const arr = data.rows;
if(arr.length != 0) {
return res.status(400).json({
error: "Email already in use.",
});
}
else {
bcrypt.hash(password, 10, (err, hash) => {
if(err)
return res.status(err).json({
error: "Server error",
});
const user = {
name,
email,
password: hash
};
var flag = 1;
client.query(`INSERT INTO customer (name, email, password) VALUES ($1, $2, $3);`, [user.name, user.email, user.password], (err) => {
if(err) {
flag = 0;
console.error(err);
return res.status(500).json({
error: "Database error",
})
} else {
flag = 1;
res.status(200).send({message: 'User added to databse, not verified'});
}
})
if(flag) {
const token = jwt.sign({
email: user.email
},
process.env.SECRET_KEY
);
}
})
}
}
catch(err) {
console.log(err);
return res.status(500).json({
error: "Database error while registering user",
});
};
}
我已经尝试了要求/导入{client}变量到我的注册代码中的变体,但我担心代码中会抛出某种看不见的错误,结果是client未定义。
2条答案
按热度按时间uajslkp61#
您的脚本无法编译...还有很多分号不见了(有些很重要)。
https://closure-compiler.appspot.com/home
我不知道你在这里发布的是不是你正在使用的,但我们只能通过这里发布的内容。
093gszye2#
由于JavaScript的异步特性,
bcrypt.hash
的回调函数中的代码将在register方法完成后执行,在这种情况下变量“client”将超出作用域。尝试将
bcrypt.hash
函数 Package 在promise中,如here所示,并在调用client.query('INSERT INTO customer ....')
之前等待调用完成。对查询调用也使用await语法,类似于const data = await client.query('SELECT ... ')
调用