如何访问 knex 查询结果



将 knex 与 express 结合使用,如何访问 knex 查询的结果?

例:

var bots = []
response = knex.select('id', 'name').from('robots')
  .then(function(robots){
    console.log(robots);
    bots = robots
  });
console.log(bots)

这将记录机器人,但不更新空的bots数组。

编辑:

作为同步解决方法,在快速路由中,我将快速块卡在 knex 块内:

router.get('/robots', function (req, res) {
  response = knex.select('id', 'name').from('robots').then(function(bots){
    res.render('robots/index', {
      page_title: 'All Robots',
      robots: bots
    }); // res.render
  }); // knex.select
}); // router.get

这是推荐的模式吗?

knex使用Promises。具体来说,它使用 http://bluebirdjs.com/docs/getting-started.html。 console.log(bots)将不起作用,因为它是立即调用的,而.then( ... )仅在成功调用并运行knex查询后调用。

您编辑的"同步解决方法"是运行 Express 响应的正确方法,尽管您不需要将该查询设置为 var response(有关此内容的更多信息,请参阅我对问题的评论)。

我建议使用async/await函数。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

router.get('/robots', async function (req, res) {
  const bots = await knex.select('id', 'name').from('robots');
  res.render('robots/index', {
    page_title: 'All Robots',
    robots: bots
  }); // res.render 
}); // router.get

相关内容

  • 没有找到相关文章

最新更新