Не удается прочитать свойство 'query' из null? - PullRequest
0 голосов
/ 09 ноября 2019
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

Как я могу решить это?

1 Ответ

0 голосов
/ 09 ноября 2019

В вашем обработчике ошибок здесь:

    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(...) отправляет ответ обратно клиенту, он не мешает вашему коду продолжать выполнение после этого, поэтому вам все еще нужно надлежащее управление потоком с помощью if/else или соответствующий return для управления потоком выполнения кода, чтобы после ошибки он не сразу выполнял другие части кода, которые вам не нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...