node.js - 无法在同一个 postgres 连接中读取('select')和写入('update')?
问题描述
我正在使用下面的代码来获取用户输入(名称、密码)并与 postgres 数据库进行比较以提供“登录”功能。我似乎能够毫无问题地接受用户输入并在数据库中找到所需的信息。当我尝试将信息写入/更新到数据库行时,会出现我的问题......我遇到程序崩溃和断开连接。我的脚本包括 2 个查询,一个用于“读取”,另一个用于“写入/更新”(已被注释掉)。
使用包含的代码会引发错误。但是,如果我删除/注释掉第二个查询(用于写入/更新数据库),则不会发生错误。我提供的代码显示该例程已被注释掉,因此不会引发错误。涉及的两个查询是一个使用“查询”变量(“读取”)和一个使用“模块”变量(“写入/更新”)
require('dotenv').config();
const url = require('url')
var pg = require('pg');
const params = url.parse(process.env.DATABASE_URL);
const auth = params.auth.split(':');
const config = {
user: auth[0],
password: auth[1],
host: params.hostname,
port: params.port,
database: params.pathname.split('/')[1],
max: 20,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
ssl: false
};
var pool = new pg.Pool(config);
var bodyParser = require('body-parser')
//Use Express module
var express = require('express');
var app = express();
var io = require("socket.io"); //web socket external module
// create application/json parser
var jsonParser = bodyParser.json()
// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })
//Respond to POST from login form
app.post('/login', function (req, res) {
var now = new Date().getTime();
//**Query PostGres database...
var conString = "postgres://user:password@localhost:5432/mydatabase";
var client = new pg.Client(conString);
const query = {
text: "SELECT * FROM users WHERE name = $1 AND pass = $2",
values: [String(req.body.user), String(req.body.password)]
};
var mods = "UPDATE users SET login = '" + now + "' WHERE name = '" + String(req.body.user) + "' AND pass ='" + String(req.body.password) + "';";
pool.connect(function(err,client,done) {
if(err){
console.log("not able to get connection "+ err);
res.status(400).send(err);
}
client.query(query, function(err, result) {
// //call `done()` to release the client back to the pool
// done();
if(err){
console.log(err);
res.status(400).send(err);
}
if (typeof result.rows[0] === "undefined") {
console.log("No user/password determined in DB for login attempt");
} else {
console.log(result.rows[0].name)
console.log(result.rows[0].pass)
console.log(result.rows[0].status)
if (result.rows[0].status === "active") {
console.log("User is determined to be ACTIVE in database");
req.session.user = String(req.body.user);
console.log("req.session.user is " + req.session.user);
if (typeof req.session.user != "undefined") {
console.log("Session User is DEFINED...!");
console.log("Dashboard Accessed");
// //callback...for WRITING into database...!
//
// client.query(mods, function(err, result) {
// // //call `done()` to release the client back to the pool
// // done();
// if(err){
// console.log(err);
// //res.status(400).send(err);
// }
//
// });
res.render('_user_steps',);
console.log("SECONDARY WRITE AND OPERATION COMPLETE...!");
} else {
console.log("Session User is NOT DEFINED...!");
} //req.session.user is defined...OR NOT...
} else {
console.log("User is determined to be INACTIVE in database");
} //User ACTIVE...OR NOT...
} //user/password is 'undefined' (NOT found in database)...OR NOT
console.log(result.rows[0]);
client.end();
});
});
});
是否可以在同一个池连接中进行读写操作而不会导致脚本崩溃......?究竟是什么导致了这种行为?任何建议将不胜感激。我提前谢谢你。
解决方案
推荐阅读
- java - 将图像设置为节点以创建路径转换 JAVA/JAVAFX
- java - ValueAnimator getAnimatedValue 未按预期工作
- javascript - 未捕获(承诺)错误:“设备”插件未在 android 上实现
- sql - 合并来自两个表的信息(时间序列)
- google-colaboratory - 如何在 colab notebook 中更新到最新版本的 sklearn
- docker - 将 docker 映像从 jenkins 推送到 jfrog 时出错
- plot - 使用 plotly.js 后端导出 png 时更改图像分辨率
- c++ - 我不知道为什么无限循环在c ++中输出“错误,请尝试agin:”;
- machine-learning - 为什么交叉验证时出现 neg_mean_absolute_error,但没有 mean_absolute_error?
- graphviz - 一个点文件中的多个图形和方向(rankdir)(gvpack 没有做我想要的)