无法读取null的属性“查询”?

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],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',result) {
               ^

TypeError: Cannot read property 'query' of null

我该如何解决?

wjqact 回答:无法读取null的属性“查询”?

在您的错误处理程序中:

    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来控制代码的执行流程,因此在发生错误后,它不会立即执行您不希望执行的代码的其他部分。

本文链接:https://www.f2er.com/3134588.html

大家都在问