每次我 运行 配置文件都不起作用
Every second time I run the config file it doesn't work
我正在使用 node.js w/ PSQL,以及 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", (err, res) => {
console.log("created db " + dbName)
const client = new Client({
host: 'localhost',
port: 5432,
user: 'postgres',
password: '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 + ")", (err, 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', (err, res) => {
console.log('created db ' + dbName);
const client = new Client({
host: 'localhost',
port: 5432,
user: 'postgres',
password: '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 + ')',
(err, res) => {
if (err) {
console.log(err);
} else {
console.log('created table ' + table.name);
}
if (i == tables.length) {
client.end();
}
}
);
}
pool.end();
});
}
请注意,我只对其中一个做出了承诺,但如果你想 运行 之后的事情,你可能必须对两者都做出承诺。
我也没有使用 async
/ await
因为我假设这不是 运行 在一个函数中并且为了简单起见你没有最新的节点 运行ning.
我正在使用 node.js w/ PSQL,以及 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", (err, res) => {
console.log("created db " + dbName)
const client = new Client({
host: 'localhost',
port: 5432,
user: 'postgres',
password: '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 + ")", (err, 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', (err, res) => {
console.log('created db ' + dbName);
const client = new Client({
host: 'localhost',
port: 5432,
user: 'postgres',
password: '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 + ')',
(err, res) => {
if (err) {
console.log(err);
} else {
console.log('created table ' + table.name);
}
if (i == tables.length) {
client.end();
}
}
);
}
pool.end();
});
}
请注意,我只对其中一个做出了承诺,但如果你想 运行 之后的事情,你可能必须对两者都做出承诺。
我也没有使用 async
/ await
因为我假设这不是 运行 在一个函数中并且为了简单起见你没有最新的节点 运行ning.