首页 > 解决方案 > Knex 不返回连接 SQL 查询

问题描述

function list() {
  return knex('restaurants')
    .join('owners', 'restaurants.owner_id', 'owners.owner_id')
    .select('restaurants.restaurant_name', 'owners.owner.name', 'owners.email')
    .orderBy('owners.owner_name');
}

function listAverageRatingByOwner() {
  return knex('restaurants')
    .join('owners', 'restaurants.owner_id', 'owners.owner_id')
    .select('owners.owner_name')
    .avg('restaurants.ratings');
}

在控制器中:

async function listAverageRatingByOwner(req, res, next) {
  const averageRatingByOwner = service.listAverageRatingByOwner();
  console.log(averageRatingByOwner);
  res.json();
}

我不确定为什么它不返回连接查询结果而是返回它。

餐厅表:restaurant_id(主键) restaurant_name(必填字符串)美食(必填字符串)地址(必填字符串) rating(可选数字) owner_id(必填外键)

所有者表: owner_id(主键) owner_name(必填字符串) email(必填字符串) address(必填字符串)

console.log 结果

标签: postgresqlexpressknex.js

解决方案


Knex 查询生成器返回 a Promise,因此您应该await使用它来获取结果集。

// controller

async function listAverageRatingByOwner(req, res, next) {
  const averageRatingByOwner = await service.listAverageRatingByOwner();
  // ---------------------------^
  console.log(averageRatingByOwner);
  res.json();
}

推荐阅读