Objection.js - 查询构建器不是使用insert方法的函数

时间:2017-12-10 15:37:27

标签: javascript node.js postgresql objection.js

我是nodejs开发的新手,我目前在postgresql上练习CRUD操作。我使用Objection.js进行ORM和模型制作。我遵循文档中的一些代码并编辑必要的行但我实际上并没有成功,而是返回此错误:

  

builder.knex(...)。queryBuilder不是函数

我正在关注MVC模式,所以我根据它分离文件。

我的控制器:

'use strict';
const Todo = require('./../models/Todo');

class TodoController {
  createTodo() {
    Todo
      .query()
      .insert({
        'title': 'asdasdasda',
        'description': 'sdasdasdasdasdsad',
        'date': '2017-12-12',
        'isActive': true,
      })
      .then(name => {
        console.log(name.description);
      })
      .catch(err => {
        console.log(err);
      });
  }
}

module.exports = TodoController;

Knex架构:

 knex.schema.createTableIfNotExists('todo', (table) => {
      table.increments();
      table.string('title', 255).notNullable();
      table.text('description').notNullable();
      table.boolean('isActive').defaultTo('false');
      table.datetime('date').notNullable();
      table.timestamp('createdAt').defaultTo(knex.fn.now());
    })

型号:

'use strict';

const { Model } = require('objection');

class Todo extends Model {
  static get tableName() {
    return 'Todo';
  }
}

module.exports = Todo;

server.js:

    ...
    const KnexConfig = require('./knexfile');
    const { Model } = require('objection');
    ...
    ...
    Model.knex(KnexConfig.development);

希望有人可以指导我,我仍然是nodejs的新手

1 个答案:

答案 0 :(得分:1)

看起来您正在尝试将knex配置对象传递给Model.knex(),而您需要传递实际的knex实例。

在server.js上:

const { Model } = require('objection');
const knex = require('knex');

const KnexConfig = require('./knexfile');

Model.knex(knex(KnexConfig.development);

当传递给Objection.js的knex实例不是应该的时候,似乎会出现此错误消息。