连接Node-Postgres,Express JS和Node JS

时间:2017-08-15 06:10:34

标签: sql node.js database postgresql express

问题:

因此,在尝试将我的页面计数器存储在数据库中时,我遇到了一个典型问题。我通过远程控制台使用Node JS和Node PG,所以我不知道版本。它不是基于连接的问题或我的数据库有任何问题,因为我已经使用示例数据库对其进行了测试。

P.S:我对javascript和数据库都很陌生(特别是),这可能是一个愚蠢的错误,所以请耐心等待。

正如您从代码中看到的那样,我使用的是旧语法,因为我已经将一年前的视频教程作为课程的一部分。

我已经完成了question,但我不认为这是问题所在。

观察:

  
      
  1. 每次,我重新启动服务器,它从server.js的计数器开始。
  2.   
  3. 此后,计数器会针对每个备用手册递增   刷新。
  4.   
  5. 我发现即使我的数据库也会相应改变。
  6.   

调试:

  
      
  1. 重新查询相同的 SELECT 不起作用。
  2.   
  3. 使用临时变量来保存计数并对其进行检查也没有任何影响。
  4.   
  5. 请求状态在200304之间切换,分别为增量和无变化。
  6.   

代码:

var express = require('express');
var morgan = require('morgan');
var path = require('path');
var app = express();
app.use(morgan('combined'));
var crypto = require('crypto');
    var Pool = require('pg').Pool;
    var config = {
        user: 'dragonlordthota717',
        database: 'dragonlordthota717',
        host: 'db.imad.hasura-app.io',
        port: '5432',
        password: process.env.DB_PASSWORD
    };

var pool = new Pool(config);
    var counter = {"pageviews":800};
    var flag = "From server.js";
    app.get('/counter', function (req, res){
      pool.query("SELECT pageviews FROM users WHERE name='Hyperclaw79'",function(err,result){
          if(err){
            res.status(500).send("Flag: "+err.toString());  
          }
          else{
            counter = result.rows[0];
            flag = "From query";
          }
      });
      var cnt = counter.pageviews;
      cnt = parseInt(cnt)+1;
      if(isNaN(cnt)) res.status(500).send(flag+': returned NaN as seen in: '+JSON.stringify(counter));
      else pool.query("UPDATE users SET pageviews = $1 WHERE name = 'Hyperclaw79'",[cnt]);
      return res.send(flag +": " + cnt.toString());
    });

我已将数据库中的pageviews设置为 850 ,以明确具体情况。

然而,它具有这种典型的交替行为。这是我收到的输出:

From server.js: 801
From query: 851
From query: 802
From query: 852
From query: 803
From query: 853
.
.
.
.
.

很明显, SELECT 查询不是第一次发送。此后,所有交易都是从数据库本身完成的。但是,即使数据库应该被801覆盖并且它应该相应地增加,但是旧的值会以某种方式交替返回,并且也会增加。

如果有人能找到错误或表明我是否错误地记录了我的错误,那将是非常有帮助的,因为我已经整整一天,但仍然无法解决这个问题。请不要使用this之类的外部软件包建议解决方法,因为我没有远程计算机上的管理员权限。 好吧,如果你能够解决这个问题,请提前感谢。

1 个答案:

答案 0 :(得分:1)

以下内容应该有效

var express = require('express');
var morgan = require('morgan');
var path = require('path');
var app = express();
app.use(morgan('combined'));
var crypto = require('crypto');
    var Pool = require('pg').Pool;
    var config = {
        user: 'dragonlordthota717',
        database: 'dragonlordthota717',
        host: 'db.imad.hasura-app.io',
        port: '5432',
        password: process.env.DB_PASSWORD
    };

var pool = new Pool(config);
    var counter = {"pageviews":800};
    var flag = "From server.js";
    app.get('/counter', function (req, res){
      pool.query("SELECT pageviews FROM users WHERE name='Hyperclaw79'",function(err,result){
          if(err){
            res.status(500).send("Flag: "+err.toString());  
          }
          else{
            counter = result.rows[0];
            flag = "From query";
            var cnt = counter.pageviews;
            cnt = parseInt(cnt)+1;
            if(isNaN(cnt)) res.status(500).send(flag+': returned NaN as seen in: '+JSON.stringify(counter));
            else pool.query("UPDATE users SET pageviews = $1 WHERE name = 'Hyperclaw79'",[cnt]);
            return res.send(flag +": " + cnt.toString());

          }
      });

    });

在原始代码中,在读取计数器后调用pool.query的回调,因此当计数器存储在变量cnt中时,计数器实际上不会更新。