Не удается подключиться к базе данных heroku PostgreSQL с помощью Node.js и Express, ошибки не отображаются - PullRequest
0 голосов
/ 18 июня 2020

Итак, я недавно создал Аккаунт на сайте heroku.com и создал базу данных PostgreSQL. Прежде всего, я хотел проверить, могу ли я что-то сохранить в базе данных (одна таблица уже была создана без node.js), но по какой-то странной причине функция обратного вызова моего dbClient.query никогда не выполнялась. Затем я понял, что база данных не подключается к моему коду. Мой пароль, хост и т.д. c. все должно быть в порядке, и я могу подключаться с внешних сайтов, но не с моего кода node.js.

Вот мой код:

var express = require("express");
var pg = require("pg");
var bodyParser = require("body-parser");

var CON_STRING = process.env.DB_CON_STRING;
if (CON_STRING == undefined) {
    console.log("Error: Environment variable DB_CON_STRING not set!");
    process.exit(1);
}

pg.defaults.ssl = true;
var dbClient = new pg.Client(CON_STRING);
dbClient.connect();

var urlencodedParser = bodyParser.urlencoded({
    extended: false
});

var PORT = 3000;

var app = express();

app.set("views", "views");
app.set("view engine", "pug");

app.get("/shoppingitems", function (req, res) {
    res.render("shoppingitems")
});

app.post("/shoppingitems", urlencodedParser, function(req, res){
    var shoppingItem = req.body.shoppingItem;
    dbClient.query("INSERT INTO shoppinglist (title) VALUES ($1)", [shoppingItem], function(dbError, dbResponse){
        console.log("function called!");
        res.redirect("/shoppingitems");
    })
    console.log("test");
})

app.listen(PORT, function () {
    console.log(`Shopping App listening on Port ${PORT}`);
});

Он не работает с другими конфигурациями dbClient .query.

1 Ответ

0 голосов
/ 07 августа 2020

Вам необходимо установить переменную среды на вашем локальном хосте, в зависимости от вашей ОС.

  • Для Ma c & Linux используйте ключевое слово 'export' в Терминале для YOUR_ENV_VAR, например:
export DB_CON_STRING=postgres://ufohlgoihdgfalr:2fb913jhazsxd541469b972fcac862ddf664620998e87c96787569poiude4ab0b@ec2-34-238-26-109.compute-1.amazonaws.com:5432/d587yhytte32gj

Вы можете проверить свою переменную, используя 'echo' и знак $ в Ma c и Linux, например

echo $DB_CON_STRING

Он должен дать вам строку, если переменная установлена ​​или нет.

Обратите внимание, что будет работать только для текущего сеанса в Терминале, если вы хотите сохранить его и использовать в течение длительного времени или после закрытия / открытия терминала, то лучше добавить его в свой. bash_profile. Таким же образом, просто сохраните его в /uerMacUser/.bash_profile

Для windows вы можете сделать это, используя GUI, для быстрого доступа используйте в 'Выполнить' rundll32.exe sysdm.cpl,EditEnvironmentVariables

Heroku Postgres использует другую переменную среды с именем 'DATABASE_URL', поэтому вы можете рассмотреть это, если вы хотите развернуть на heroku позже, иначе ваше приложение не запустится на heroku.

...