Экспресс-автоматическая загрузка моделей Cassandra из каталога - models.instance.Person не является конструктором

Я в основном пытаюсь реализовать модель человека из express-cassandra учебник.

У меня проблемы с автозагрузкой модели из model папка. Моя модель находится в /models/PersonModel.js,

module.exports = {
    fields:{
        name    : "text",
        surname : "text",
        age     : "int"
    },
    key:["name"]
}

Код инициализации находится в index.js на один уровень выше. Это просто скопировать вставить из учебника. Инициализация работает хорошо без ошибок.

var models = require('express-cassandra');

//Tell express-cassandra to use the models-directory, and
//use bind() to load the models using cassandra configurations.
models.setDirectory( __dirname + '/models').bind(
    {
        clientOptions: {
            contactPoints: ['127.0.0.1'],
            protocolOptions: { port: 9042 },
            keyspace: 'mykeyspace',
            queryOptions: {consistency: models.consistencies.one}
        },
        ormOptions: {
            //If your keyspace doesn't exist it will be created automatically
            //using the default replication strategy provided here.
            defaultReplicationStrategy : {
                class: 'SimpleStrategy',
                replication_factor: 1
            },
            migration: 'safe',
            createKeyspace: true
        }
    },
    function(err) {
        if(err) console.log(err.message);
        else console.log(models.timeuuid());
    }
);

Проблема возникает, когда я пытаюсь вставить запись. Я получаю ошибку TypeError: models.instance.Person is not a constructor, Причина в том, что модель не была загружена автоматически. В объекте дампа моделей я вижу, что каталог установлен правильно, а экземпляры моделей пусты.

Я пытался следовать учебнику. Я что-то пропустил? Есть у кого рабочий пример автозагрузки модели?

1 ответ

Лучше поздно, чем никогда!

"bind" является асинхронным, а "function(err) {" является обратным вызовом.

Поместите туда свой код ввода, и он будет работать нормально.

То есть. Вы пытаетесь вставить элемент до инициализации базы данных.

Вот так:

models.setDirectory( __dirname + '/models').bind(
    {
        clientOptions: {
            contactPoints: ['127.0.0.1'],
            protocolOptions: { port: 9042 },
            keyspace: 'mykeyspace',
            queryOptions: {consistency: models.consistencies.one}
        },
        ormOptions: {
            defaultReplicationStrategy : {
                class: 'SimpleStrategy',
                replication_factor: 1
            },
            migration: 'safe'
        }
    },
    function(err) {
        if(err) throw err;
      addUser();
      console.log("err thing");

        // You'll now have a `person` table in cassandra created against the model
        // schema you've defined earlier and you can now access the model instance
        // in `models.instance.Person` object containing supported orm operations.
    }
);

function addUser(){
  var john = new models.instance.Person({
      name: "John",
      surname: "Doe",
      age: 32,
      created: Date.now()
  });
  john.save(function(err){
      if(err) {
          console.log(err);
          return;
      }
      console.log('Yuppiie!');
  });
}
Другие вопросы по тегам