我正在使用 node-postgres 从 NodeJS 连接到 Postgres 数据库;Cannot read property 'rows' of undefined
在运行程序 30 秒后(在第一次请求服务器之后),它给出了一个奇怪的错误。如果我不使用 Express,错误就会消失。
我已经剥离了代码以重现错误:
1 var conn_string = "pg://postgres@localhost:5432/foobardb";
2 var express = require("express");
3 var pg = require("pg");
4 var router_home = express.Router();
5 var app = express();
6
7 pg.connect(conn_string, function(err, client, done){
8 router_home.get("/", function(req, res, next){
9 client.query("select * from visit", function(err, result){
10 done();
11 res.end(JSON.stringify(result.rows[0]));
12 });
13 });
14 });
15 app.use("/", router_home);
16 app.listen(8080);
在此代码示例上运行curl -X GET http://localhost:8080/
前几次运行良好,然后在 30 秒后(第一次运行后)失败并给出以下错误:
TypeError: Cannot read property 'rows' of undefined
at null.callback (/Users/yc/nodeProjects/pgExpress.js:11:33)
at Query.handleError (/Users/yc/nodeProjects/node_modules/pg/lib/query.js:106:17)
at null.<anonymous> (/Users/yc/nodeProjects/node_modules/pg/lib/client.js:171:26)
at emitOne (events.js:90:13)
at emit (events.js:182:7)
at Socket.<anonymous> (/Users/yc/nodeProjects/node_modules/pg/lib/connection.js:59:10)
at emitOne (events.js:90:13)
at Socket.emit (events.js:182:7)
at Socket.writeAfterFIN [as write] (net.js:281:8)
at Connection.query (/Users/yc/nodeProjects/node_modules/pg/lib/connection.js:189:15)
如果我在不使用 Express 的情况下重写相同的程序,它就可以无限期地正常工作。
1 var conString = "pg://postgres@localhost:5432/foobardb";
2
3 var http = require('http');
4 var pg = require('pg');
5
6 var server = http.createServer(function(req, res) {
7 pg.connect(conString, function(err, client, done) {
8
9 client.query("select * from visit", function(err, result) {
10 done();
11 res.end(JSON.stringify(result.rows[0]));
12 });
13 });
14 });
15 server.listen(3001);
除了使用 Express 之外,代码是相同的。我真的很困惑。我的猜测是它可能与缓存有关,尽管为什么当我不使用 Express 时它会消失,这超出了我的理解。一个修复,或者如何解决这个问题(同时仍然使用 Express)将不胜感激!