Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无法读取null的属性“query”?_Node.js_Postgresql_Heroku - Fatal编程技术网

Node.js 无法读取null的属性“query”?

Node.js 无法读取null的属性“query”?,node.js,postgresql,heroku,Node.js,Postgresql,Heroku,这是我的nodejs文件,connectionString是连接heroku和postgreSQL的数据库信息 但当我运行这个时,我只得到 查询'SELECT*FROM employee,其中empid=$1',[1],函数err,结果{ ^ TypeError:无法读取null的属性“query” 如何解决此问题?在您的错误处理程序中: var express = require('express'); var pg = require('pg'); var app = express();

这是我的nodejs文件,connectionString是连接heroku和postgreSQL的数据库信息

但当我运行这个时,我只得到

查询'SELECT*FROM employee,其中empid=$1',[1],函数err,结果{ ^ TypeError:无法读取null的属性“query”
如何解决此问题?

在您的错误处理程序中:

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');
});
您需要添加一个返回,以便在发送错误状态后,代码不会继续尝试执行client.query,因为如果出现错误,客户端中没有有效值。因此,请更改为:

    if (err) {
        console.log("not able to get connection " + err);
        res.status(400).send(err);
    }
    client.query(...)
虽然它的影响较小,但在这里也是如此:

    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);

这两种情况下的总体问题是,虽然res.status….send….将响应发送回客户端,但它不会阻止您的代码在此之后继续执行,因此您仍然需要使用if/else进行适当的流控制,或者使用适当的返回来控制代码的执行流,以便在发生错误后不会立即执行ute您不希望的代码的其他部分。

这意味着客户端为空。您使用的是哪个postgres模块@김기훈 - 嗯,这是需要解决的问题-显然还有更多的问题。也许你没有正确地使用pg.connect函数。我不知道那个API,但我会查一下。你正在使用哪个确切的postgres模块?你能在NPM上提供到它的链接吗@김기훈 - 我看到的文档和两个文档显示的连接顺序与您显示的不同。一个构建池对象,另一个构建客户端对象,两者都不像您的代码。您确定您的连接方法正确吗@김기훈 - 你想好你的问题了吗?
            if (err) {
                console.log(err);
                res.status(400).send(err);
                return;
            }
            res.status(200).send(result.rows);