仅使用 PG 和 Node 如何 return PostgreSQL 数据库结果?

How to return PostgreSQL database result by using PG and Node only?

我正在尝试给自己一个练习,只使用纯节点作为我的服务器和 PG 来连接到 PostgreSQL。我想在这里做的是 return 从数据库查询后的结果,知道这是异步的问题。那么我如何 return client.query.

中的回调函数的值
function showAllMovies(){


pg.connect(connectionString, function (err, client, done) {
    if (err) {
      console.log('Can not log into database');
    } else {
      console.log('Connect to database...');
      client.query('SELECT * FROM movies', function (err, result) {
        done();  // client idles for 30 seconds before closing
        var result = JSON.stringify(result.rows[0].movie);
        console.log(result);
        return result;
      });
    }
  });
  pg.end();
}

您不能直接 return 值。您需要将自己的回调添加到您需要调用的函数中,并将结果提供给该回调。

例如:

function showAllMovies(callback)
{
  pg.connect(connectionString, function (err, client, done)
  {
    if (err)
    {
      console.log('Can not log into database');
    }
    else
    {
      console.log('Connect to database...');
      client.query('SELECT * FROM movies', function (err, result)
      {
        callback(result.rows[0].movie);
        done();
      });
    }
  });
}

在这种情况下,您可以像这样在响应处理程序中使用它:

showAllMovies(function(movie) { response.write('<li>'+movie+'</li>'); });

请注意,这只是一个示例,您实际上应该在输出前进行 HTML 转义。

或者,如果您正在响应请求并使用 Express,您可以简单地传递响应对象并调用其方法之一。例如:

app.get('/movies', function(req,res)
{
  pg.connect(connectionString, function (err, client, done)
  {
    if (err)
    {
      console.log('Can not log into database');
    }
    else
    {
      console.log('Connect to database...');
      client.query('SELECT * FROM movies', function (err, result)
      {
        res.write('<li>'+result.rows[0].movie+'</li>');
        done();
      });
    }
  });
});

相同的 HTML 转义警告适用于此处。