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

时间:2015-12-18 08:31:11

标签: javascript node.js postgresql pg

我试图给自己一个练习,只使用纯节点作为我的服务器和PG连接到PostgreSQL。我想在这里做的是在从数据库查询后返回结果并知道它是异步问题。那么我如何从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();
}

1 个答案:

答案 0 :(得分:1)

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

例如:

.left-content li.menu-item a.active:after {
    font-family: FontAwesome;
    content: '\f105';
    display: inline-block;
    color: #fff;
    margin-left: 15px;
}

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

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

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

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

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

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