当要求NodeJS与PostgreSQL通讯时应用程序崩溃

时间:2019-10-23 15:40:16

标签: node.js heroku heroku-postgres

我在Web开发方面经验很少,但是到目前为止,我建立的网站都具有嵌入式数据库。这是我第一次尝试构建具有非嵌入式数据库的网站。

我已经使用 NodeJS Express 框架构建了一个骨架站点。它由 Heroku 托管。在尝试添加数据库之前,该应用程序似乎按预期运行良好。

但是,现在我已经向应用程序中添加了scraper.js文件,我得到的只是关于应用程序崩溃的通知。该文件的内容为:

const Finaliser = require("./finaliser.js");
const { Client } = require("pg");
const client = new Client({
  connectionString: process.env.DATABASE_URL,
  ssl: true,
});

class Scraper
{
  constructor()
  {
    this.finaliser = new Finaliser();
  }

  fetchAsIs(req, res)
  {
    var data, columns, rows;
    var tableName = req.params.id;
    var that = this;
    var queryString = "SELECT * FROM "+tableName+";";

    client.connect();
    client.query(queryString, (err, extract) => {
      if(err) throw err;

      client.end();

      console.log(extract);
      that.finaliser.protoRender(req, res, "asis",
                                 { title: tableName });
    });
  }
};

module.exports = Scraper;

其他详细信息:

  • 运行heroku logs --tail给出:
2019-10-23T15:35:50.281517+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=harvesthub.herokuapp.com request_id=caadba91-9b2d-4525-9c9c-19c34733073d fwd="194.33.13.237" dyno= connect= service= status=503 bytes= protocol=https
2019-10-23T15:35:50.588155+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=harvesthub.herokuapp.com request_id=28b7948f-ff59-44f0-867a-f3ce7ede86cc fwd="194.33.13.237" dyno= connect= service= status=503 bytes= protocol=https
  • 我认为数据库设置正确。运行heroku addons --app harvesthub得到:
Add-on                                            Plan       Price  State  
────────────────────────────────────────────────  ─────────  ─────  ───────
heroku-postgresql (postgresql-crystalline-06305)  hobby-dev  free   created
 └─ as DATABASE

The table above shows add-ons and the attachments to the current app (harvesthub) or other apps.
  • 该应用程序源代码的存储库为https://github.com/tomhosker/harvesthub

  • 我知道"SELECT * FROM "+tableName+";"是悲伤的秘诀。我待会儿再更改。

  • 很抱歉这么长的问题!

1 个答案:

答案 0 :(得分:0)

问题是我未能正确安装pgdotenv软件包。 (我曾尝试 来安装它们,但出于某些原因却没有这样做。)

对于任何一个发现自己和我位置相同的人:请仔细检查pgdotenv在您的package.json文件中。如果缺少它们,请运行npm install --save pg dotenv进行安装。

衷心感谢Justin Moser。这个答案只是他评论的充实。