如何解决每次我运行配置文件时它都不起作用
我正在使用带有 PSQL 的 node.js,以及 express 和 node-postgres。我有一个名为 config.js 的文件。目的是让它删除数据库,然后在每次运行时与表一起重新创建它。这每隔一次工作一次,另一半时间返回一个错误,而不是重新创建数据库。
(node:11300) UnhandledPromiseRejectionWarning: error: database "abc" does not exist
有人知道怎么回事吗?请告诉我是否需要包含完整的错误消息,我没有,因为它看起来不是很有用。
代码:
const { Pool,Client } = require('pg')
let dbName = "abc"
let tables = [{
name: "users",content: "id SERIAL,username VARCHAR,email VARCHAR,passcode VARCHAR"
}]
let pool = new Pool({
user: 'postgres',host: 'localhost',database: 'postgres',password: 'postgres',port: 5432
})
deleteDb()
createDbAndTables()
function deleteDb() {
pool.query("DROP DATABASE IF EXISTS abc",(err,res) => {
if (err) {
console.log(err)
} else {
console.log("deleted db " + dbName)
}
})
}
function createDbAndTables() {
pool.query("CREATE DATABASE abc",res) => {
console.log("created db " + dbName)
const client = new Client({
host: 'localhost',port: 5432,user: 'postgres',database: dbName,})
client.connect()
for (let i = 0; i < tables.length; i++) {
let table = tables[i]
client.query("CREATE TABLE " + table.name + "(" + table.content + ")",res) => {
if (err) {
console.log(err)
} else {
console.log("created table " + table.name)
}
if (i == tables.length) {
client.end()
}
})
}
pool.end()
})
}
如果我做错了什么或可以进行优化,我也很乐意听取他们的意见。 提前感谢您的帮助!
解决方法
这是确保您的两个函数 deleteDb
和 createDbAndTables
按顺序运行的非常快速和肮脏的方法:
const { Pool,Client } = require('pg');
let dbName = 'abc';
let tables = [
{
name: 'users',content: 'id SERIAL,username VARCHAR,email VARCHAR,passcode VARCHAR',},];
let pool = new Pool({
user: 'postgres',host: 'localhost',database: 'postgres',password: 'postgres',port: 5432,});
deleteDb().then(() => {
createDbAndTables();
});
function deleteDb() {
return new Promise((resolve,reject) => {
pool.query('DROP DATABASE IF EXISTS abc',(err,res) => {
if (err) {
reject(err);
} else {
resolve('deleted db ' + dbName);
}
});
});
}
function createDbAndTables() {
pool.query('CREATE DATABASE abc',res) => {
console.log('created db ' + dbName);
const client = new Client({
host: 'localhost',user: 'postgres',database: dbName,});
client.connect();
for (let i = 0; i < tables.length; i++) {
let table = tables[i];
client.query(
'CREATE TABLE ' + table.name + '(' + table.content + ')',res) => {
if (err) {
console.log(err);
} else {
console.log('created table ' + table.name);
}
if (i == tables.length) {
client.end();
}
}
);
}
pool.end();
});
}
请注意,我只对其中一个做出了承诺,但如果您想在之后进行操作,则可能必须对两者都做出承诺。
我也没有使用 async
/ await
,因为我认为这不是在功能内部运行,并且为了简单起见,您没有运行最新的节点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。