gpt4 book ai didi

node.js - 如何利用 Heroku 的 'postdeploy' 脚本在配置的 Heroku PostgreSQL 数据库中创建表?

转载 作者:搜寻专家 更新时间:2023-11-01 00:37:15 25 4
gpt4 key购买 nike

我正在开发一个在 Heroku 上设置的网络应用程序。我希望其他人能够自己使用它,所以我尝试创建一个“部署到 Heroku”按钮以包含在我存储库的自述文件中。

根据 Heroku 的文档1、2,我创建了一个 app.json 文件,其中概述了 Heroku 提供应用程序所需的一切。这是我的 app.json 文件的样子:

{
"name": "[title]",
"author": "[author]",
"description": "[desc]",
"repository": "[https://github.com/[user]/[repo]",
"logo": "[url]",
"addons": [
"heroku-postgresql:hobby-dev",
"wwwhisper:solo"
],
"scripts": {
"postdeploy": "node server/models/database.js"
},
"env": {
"TZ": "America/Los_Angeles"
}
}

如您所见,postdeploy 脚本应该调用 database.js 脚本,如下所示:

const pg = require('pg');
const connectionString = process.env.DATABASE_URL;

const client = new pg.Client(connectionString);

client.connect();
client.query('CREATE TABLE IF NOT EXISTS table_name (id uuid, url VARCHAR(2000), \
title TEXT, description TEXT, been_visited BOOLEAN DEFAULT false, created_at TIMESTAMP DEFAULT NOW())', (err, res) => {
if (err) {
client.end();
return console.error('error with PostgreSQL database', err);
}
});

client.end();

我知道查询在本地测试时有效,但是当我使用上面的 app.json 测试按钮时,我仍然收到错误 error: relation "tanabata_tree"does not存在 - 表示从未创建该表。

我哪里/哪里做错了?


1:https://devcenter.heroku.com/articles/heroku-button https://devcenter.heroku.com/articles/heroku-button

2:https://devcenter.heroku.com/articles/app-json-schema

最佳答案

您的 client.end(); 位于数据库查询回调函数之外。你的数据库连接在你的创建表查询完成之前就结束了,因为 JavaScript 是 Asynchronous .

解决方案是将您的 client.end(); 放入您的回调函数中,以便在您的数据库查询完成后 调用它。

这是工作代码:

const connectionString = process.env.DATABASE_URL;

const client = new pg.Client(connectionString);

client.connect();
client.query('CREATE TABLE IF NOT EXISTS table_name (id uuid, url VARCHAR(2000), \
title TEXT, description TEXT, been_visited BOOLEAN DEFAULT false, created_at TIMESTAMP DEFAULT NOW())', (err, res) => {
if (err) {
return console.error('error with PostgreSQL database', err);
}
client.end();
});

关于node.js - 如何利用 Heroku 的 'postdeploy' 脚本在配置的 Heroku PostgreSQL 数据库中创建表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47195271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com