Экспресс-автоматическая загрузка моделей 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!');
});
}