Interfacing Node-Postgres, Express JS and Node JS



问题:

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

PS:我是javascript和数据库的新手(特别是(,这可能是一个愚蠢的错误,所以请耐心等待。

从代码中可以看出,我使用的是旧语法,因为我正在遵循一年前的视频教程作为课程的一部分。

我已经经历了这个问题,但我认为这不是这里的问题。

<小时 />

观察:

  1. 每次重新启动服务器时,它都会从服务器的计数器.js启动。
  2. 此后,每个备用手册的计数器都会递增 刷新。
  3. 我观察到甚至我的数据库也在相应地被更改。
<小时 />

调试:

  1. 重新查询相同的选择不起作用。
  2. 使用 temp 变量来保存计数并对其进行检查也没有影响。
  3. 请求状态分别在200304之间切换,分别是增量和无变化。
<小时 />

代码:

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());
});

我将DB中的pageviews设置为850,以明确到底发生了什么。

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

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

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


如果有人能找到错误或指出我的逻辑是否错误,那将非常有帮助,因为我已经做了一整天,但仍然无法弄清楚这一点。请不要建议使用这样的外部软件包的解决方法,因为我在远程计算机上没有管理员权限。 好吧,如果您能够弄清楚这一点,请提前感谢您。

以下内容应该有效

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中时,计数器实际上并没有更新。

最新更新