ECONNRESET一行查询数据库两次写错误[Node.js]
ECONNRESET Write error when querying database two times in a row [Node.js]
我有一个node.js文件,它有从我的heroku postgresql数据库读取和写入的方法。我正在使用"pg"模块来访问DB。我的问题是,在一行中多次调用我的getSleepMode函数会导致ECONNRESET错误。这个函数只是向我的DB发送一个查询并检索一个整数。我理解这可能是因为node.js函数是非阻塞的,并且getSleepMode()的两个实例都试图同时访问我的DB。但是,如果不止一个客户端同时试图从我的数据库获取数据,这不是一个问题吗?假设我的heroku postgresql db可以同时处理来自多个客户端的查询,这不应该仍然工作吗?下面是相关的代码:
[database connection variables omitted]
var pg = require("pg")
var conString = "pg://" + USER + ":" + PW + "@" + HOST + ":" + PORT + "/" +
DATABASE + "?ssl=true";
var client = new pg.Client(conString);
/*This function accesses my database and retrieves an integer field
called "sleepmode"*/
function getSleepMode(username) {
var query = "SELECT sleepmode FROM '"Users'" where username='" +
username + "';";
connectWrapper(query, function(err,result) {
if (err) {
return console.err("Error getting sleep mode", err);
}
client.end();
console.log("sleepmode " + result.rows[0].sleepmode);
});
}
/*This function is here so I can reuse it for more than just
my getSleepMode() function*/
function connectWrapper(query, handler) {
client.connect(function(err) {
if (err) {
return console.error('could not connect to postgresq',err);
}
client.query(query, handler);
});
}
getSleepMode("username1"); //This ALONE works
getSleepMode("username2"); //but when this line follows, i get the error
运行此命令会产生如下输出:
$user: node dbconnect.js
could not connect to postgresq { [Error: write ECONNRESET] code: 'ECONNRESET', err
ECONNRESET', syscall: 'write' }
could not connect to postgresq { [Error: write ECONNRESET] code: 'ECONNRESET', err
ECONNRESET', syscall: 'write' }
Events.js:72
throw er; // Unhandled 'error' event
^
Error: write ECONNRESET
at errnoException (net.js:904:11)
at Socket._write (net.js:645:26)
at doWrite (_stream_writable.js:225:10)
at writeOrBuffer (_stream_writable.js:215:5)
at Socket.Writable.write (_stream_writable.js:182:11)
at Socket.write (net.js:615:40)
at write (_stream_readable.js:601:24)
at flow (_stream_readable.js:610:7)
at _stream_readable.js:578:7
at process._tickCallback (node.js:419:13)
但是当我运行它时,getSleepMode()只被调用一次,没有错误,它按预期工作。
$user: node dbconnect.js
sleepmode 1
您结束了客户端两次(client.end();
),这可能导致您的问题。具体来说,它看起来像是在其他查询完成执行之前连接就关闭了。
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- 在node.js中写入ECONNRESET错误和套接字连接检查
- 如何使用Node/Express显示有关特定错误的自定义html页面
- Node.js错误“;ReferenceError:全局未定义“;在从0.10.2更新到0.12.2之后
- Node.js引用错误:未定义类名
- 可以'无法正确访问NODE_ENV环境变量,这是NODE.js的错误吗
- Node.js/Express未输出console.log,highcharts.js给出未定义的错误
- 如何使用node.js将web和错误事件记录到Splunk
- node.js脚本中出现Sqlite Sqlite_MISUSE错误
- 管理node.js中的运行时错误
- Node.js作用域错误
- 如何解决node.js的ENOENT错误
- Node.js正确的回调错误句柄
- HTTP模块加载错误Node.js
- 中等数据发布工作和大数据发布抛出错误?(node . js和;RabbitMQ)
- 类型错误:Node的参数1.appendChild不是一个对象
- ECONNRESET一行查询数据库两次写错误[Node.js]
- node JS内存错误(node:: smallloc::Alloc)
- 甚至不返回错误?node . js的请求
- 如何忽略自签名证书错误node.jssoap.js