因此,在尝试将我的页面计数器存储在数据库中时,我遇到了一个典型问题。我通过远程控制台使用Node JS和Node PG,所以我不知道版本。它不是基于连接的问题或我的数据库有任何问题,因为我已经使用示例数据库对其进行了测试。
P.S:我对javascript和数据库都很陌生(特别是),这可能是一个愚蠢的错误,所以请耐心等待。
正如您从代码中看到的那样,我使用的是旧语法,因为我已经将一年前的视频教程作为课程的一部分。
我已经完成了question,但我不认为这是问题所在。
- 每次,我重新启动服务器,它从server.js的计数器开始。
- 此后,计数器会针对每个备用手册递增 刷新。
- 我发现即使我的数据库也会相应改变。
醇>
- 重新查询相同的 SELECT 不起作用。
- 使用临时变量来保存计数并对其进行检查也没有任何影响。
- 请求状态在
醇>200
和304
之间切换,分别为增量和无变化。
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之类的外部软件包建议解决方法,因为我没有远程计算机上的管理员权限。 好吧,如果你能够解决这个问题,请提前感谢。
答案 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
中时,计数器实际上不会更新。