var express = require('express');
var pg = require('pg');
var app = express();
var connectionString = "postgres://...";
app.get('/', function (req, res, next) {
pg.connect(connectionString, function (err, client, done) {
if (err) {
console.log("not able to get connection " + err);
res.status(400).send(err);
}
client.query('SELECT * FROM employee WHERE empid=$1', [1], function (err, result) {
done(); // closing the connection;
if (err) {
console.log(err);
res.status(400).send(err);
}
res.status(200).send(result.rows);
});
});
});
app.listen(3000, function () {
console.log('Server is running.. on Port 3000');
});
这是我的nodejs文件,而connectionString是连接heroku和postgreSQL的数据库信息。
但是当我运行这个时,我只会得到
client.query('SELECT * FROM employee WHERE empid=$1', [1], function (err, result) {
^
TypeError: Cannot read property 'query' of null
我该如何解决?
答案 0 :(得分:0)
在您的错误处理程序中:
if (err) {
console.log("not able to get connection " + err);
res.status(400).send(err);
}
client.query(...)
您需要添加一个返回值,以便在发送错误状态后,该代码不再继续尝试执行client.query()
,因为如果存在一个client
,则其中没有有效值。错误。因此,更改为:
if (err) {
console.log("not able to get connection " + err);
res.status(400).send(err);
return;
}
client.query(...)
尽管后果不多,但在这里也是如此:
if (err) {
console.log(err);
res.status(400).send(err);
}
res.status(200).send(result.rows);
您需要添加退货的地方:
if (err) {
console.log(err);
res.status(400).send(err);
return;
}
res.status(200).send(result.rows);
在这两种情况下的总体问题是,尽管res.status(...).send(...)
将响应发送回客户端,但是这并不会阻止代码在此后继续执行,因此您仍然需要使用{{1} }或适当的if/else
来控制代码的执行流程,因此在发生错误后,它不会立即执行您不希望执行的代码的其他部分。