postgresql 继续获得以下内容;“类型错误:无法读取未定义的属性(阅读'query')”

7ajki6be  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(2)|浏览(152)

使用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未定义。

uajslkp6

uajslkp61#

您的脚本无法编译...还有很多分号不见了(有些很重要)。

JSC_DYNAMIC_IMPORT_USAGE: Dynamic import expressions cannot be transpiled. at line 5 character 19
const { client } = import("../db/index.mjs");
                   ^

https://closure-compiler.appspot.com/home
我不知道你在这里发布的是不是你正在使用的,但我们只能通过这里发布的内容。

093gszye

093gszye2#

由于JavaScript的异步特性,bcrypt.hash的回调函数中的代码将在register方法完成后执行,在这种情况下变量“client”将超出作用域。
尝试将bcrypt.hash函数 Package 在promise中,如here所示,并在调用client.query('INSERT INTO customer ....')之前等待调用完成。对查询调用也使用await语法,类似于const data = await client.query('SELECT ... ')调用

相关问题