从节点+ Express +也在本地连接到Heroku Postgres的问题

时间:2020-07-25 07:39:48

标签: node.js postgresql express heroku

  • 这里是Node的新手,已经连续3天尝试了,没头绪。
  • 阅读所有类似的问题,并尝试我能找到的一切,没有运气。
  • 怀疑与我的机器或代码不常见或不相关的事物。

  • 问题:尝试从postgres db中获取node.js中的数据-至少要控制台,以便稍后将其呈现为HTML

  • 数据库具有表名:heroku上的学生,并且具有记录

  • 在我的macOS上也本地安装了postgres,其中在简单的表students中安装了简单数据

  • 我无法获取任何数据,没有错误,也不知道如何跟踪它!

  • 尝试与池,客户端建立连接。.也完全使用了heroku指南here

  • 从字面上看,其他用户最常遇到的一切

  • 如果我在终端中回显$ DATABASE_URL,则DATABASE_URL环境变量正常:


postgres://xnlkikdztxosk:kuadf76d555dfab0a6c159b8404e2ac254f581639c09079baae4752a7b64a@ec3-52-120-48-116.compute-1.amazonaws.com:5432/uytnmb7fvbg1764

  • 当我运行'node app.js'服务器在端口3000上启动正常时,我可以在根目录'/'上使用邮递员,并且工作正常,它会返回json信息和console.log
  • 如果我尝试对'/ students'进行邮递,则它将永远尝试,没有结果,没有错误,没事
  • 也尝试在本地安装postgres,同样的事情
  • 我的模块正常,并且我多次运行npm install
  • 可能是我的mac防火墙,我完全将其关闭了
  • 也尝试过此操作,什么也没打印出来,也不知道在哪里跟踪:

process.on('uncaughtException', function (err) {
  console.log(err);
}); 

  • 跟踪此类问题的指南或步骤将受到高度赞赏

    app.js file:
    
      const express = require('express')
      const bodyParser = require('body-parser')
      const { Client } = require('pg');
    
      const app = express()
      const PORT = 3000
    
      app.use(bodyParser.json())
      app.use(
        bodyParser.urlencoded({
          extended: true,
        })
      )
    
      const client = new Client({
        connectionString: process.env.DATABASE_URL,
        ssl: {
          rejectUnauthorized: false
        }
      });
      client.connect();
    
      app.get('/', (req, res) => {
        res.json({ info: 'Info: This is the root directory' });
        console.log('main directory')
      })
    
      app.get('/students', (req, res) => {
    
        client.query('SELECT * FROM students;', (err, res) => {
          if (err) throw err;
          for (let row of res.rows) {
            console.log(JSON.stringify(row));
            console.log('WHOOOOOO, finally!');
          }
          client.end();
        });
      });
    
      app.listen(PORT, function(){ 
        console.log('Server running on port 3000');
      });
    

2 个答案:

答案 0 :(得分:0)

我认为这里的问题是您没有在$sql = "SELECT * FROM $table WHERE name1 OR name2=".$_SESSION['user_id']; 路由中发送任何响应。请注意,在/students路由中,您有一个/发送了一个响应,但在res.json路线我看不到您的回复发送到哪里,这就是您永远等待的原因

答案 1 :(得分:0)

好吧,由于某种原因,我的节点版本是v14,不确定如何发生,但是节点站点中最稳定的版本是12,所以我安装了v12,并且到pg的连接在heroku上本地和远程均可。

  • 这只是为了强调在连续尝试4天后与我合作的情况。

但是,这可能会为您触发类似我所面临的其他问题:

DeprecationWarning: Implicit disabling of certificate verification is deprecated and will be removed in pg 8. Specify `rejectUnauthorized: true` to require a valid CA or `rejectUnauthorized: false` to explicitly opt out of MITM protection.
  • 到目前为止找到的所有答案都指向:pg模块已在v7.18.1中修复,但是由于某些原因我不能强迫package.json采取该版本,它使我跳至7.18.2版。
  • 尝试将其与最新版本8.3一起与heroku相同,但在本地不显示该消息

虽然没什么大不了的,但是连接在解决之前一直有效。