【问题标题】:How to return PostgreSQL database result by using PG and Node only?如何仅使用 PG 和 Node 返回 PostgreSQL 数据库结果?
【发布时间】:2018-10-05 21:49:44
【问题描述】:

我试图给自己一个练习,只使用纯节点作为我的服务器和 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();
}

【问题讨论】:

标签: javascript node.js postgresql pg


【解决方案1】:

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

例如:

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 转义警告也适用于此。

【讨论】:

  • 感谢这个简单的指导,但我还是卡住了。因为我将在我的 requestHandler 中使用这个 showAllMovies 函数。像这样: response.write('
  • ' + database.showAllMovies() + '
  • ');你能给我更多的公会路线吗?谢谢!
  • 再一次,要么向 showAllMovies 函数添加回调,该函数将调用它来执行输出,要么传递 response,然后你的函数执行输出。
  • 编辑了答案以说明如何做到这一点。
  • 非常非常非常感谢!这正是我需要的!我一直在想如何从 showAllMovie 函数中“返回”值,但现在我意识到回调的力量有多大!
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签