Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Knex Js从原始SQL返回不同的输出_Node.js_Sqlite_Express_Knex.js - Fatal编程技术网

Node.js Knex Js从原始SQL返回不同的输出

Node.js Knex Js从原始SQL返回不同的输出,node.js,sqlite,express,knex.js,Node.js,Sqlite,Express,Knex.js,我有两张桌子。一个是类别表,另一个是带有类别外键的项目表(一个类别可以有多个项目) 我试图公开下面代码中的所有项目 router.route('/projects') .get(function(req,res){ //knex('projects').select(['projects.id','projects.name','projects.category_id','categories.name']).innerJoin('categories','projects.cat

我有两张桌子。一个是类别表,另一个是带有类别外键的项目表(一个类别可以有多个项目)

我试图公开下面代码中的所有项目

router.route('/projects')
  .get(function(req,res){
    //knex('projects').select(['projects.id','projects.name','projects.category_id','categories.name']).innerJoin('categories','projects.category_id','categories.id')
    knex.from('projects').innerJoin('categories','projects.category_id','categories.id')
    .then(function(collection){

      console.log(collection);
      res.json({
        error:false,
        data: collection
      })
    })
    .catch(function(err){
      res.json({
        error:true,
        data:{
          message:err.message
        }
      })
    })
  })
这两个knex语句返回的输出几乎都是截断的,如下所示

{
  "error": false,
  "data": [
    {
      "id": 1,
      "name": "Music",
      "category_id": 1,
      "created_at": 1458126413858
    },
    {
      "id": 2,
      "name": "Science",
      "category_id": 2,
      "created_at": 1458126413858
    }
  ]
}
然而,原始SQL似乎是正确的

select * from "projects" inner join "categories" on "projects"."category_id" = "categories"."id"

在sqlite上单独运行上述语句似乎会返回整个表的结果

我的knex声明哪里出了问题

作为参考,这是模式

项目表

var table = (table) => {
  table.increments().primary();
  table.string('name');
  table.integer('category_id').references('categories.id');
  table.timestamp('created_at').defaultTo(Date.now());
}
类别表

var table = (table) => {
  table.increments().primary();
  table.string('name');
  table.timestamp('created_at').defaultTo(Date.now());
}

通过对列名使用别名解决了此问题,如下所示

knex('projects').select(['projects.id as projectId','projects.name as projectName','projects.category_id','categories.name as categoryName']).innerJoin('categories','projects.category_id','categories.id')
knex('projects').select(['projects.id as projectId','projects.name as projectName','projects.category_id','categories.name as categoryName']).innerJoin('categories','projects.category_id','categories.id')