Где определить пользовательскую схему с помощью RailwayJS
В документах просто говорится "или определите пользовательскую схему (не для жонглирования), например, mongoose. Обратите внимание, что в случае пользовательской схемы все функции jugglingdb, конечно, будут отключены".
Тем не мение..
Где именно эта схема должна быть создана?
2 ответа
Я считаю, что вы все еще можете создать его внутри db/schema.js. Например:
customSchema(function () {
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var Schema = mongoose.Schema, ObjectId = Schema.ObjectId;
var BlogPost = new Schema({
author : ObjectId
, title : String
, body : String
, date : Date
});
var Post = mongoose.model('BlogPost', BlogPost);
Post.modelName = 'BlogPost'; // this is for some features inside railway (helpers, etc)
module.exports['BlogPost'] = Post;
});
У меня были похожие проблемы с приведением приведенного выше примера customSchema. Я думаю, что этот маленький совет может сэкономить много времени для других, пытающихся использовать customjheals Railwayjs.
После того, как я положил console.log("custom schema initialized");
в пределах customSchema(function() {...})
блок кода, я заметил, что console.log не стрелял... что, очевидно, означало, что блок customSchema в моем db/schema.js
файл даже не вызывали.
После долгих раздумий я понял, что в вашем config/database.json
Для этого файла необходимо установить драйвер в "память" (для любой среды, в которой вы хотите запускать customSchema). Например, если для него установлено значение driver: "mongoose", Railway не будет запускать блок кода customSchema.
Итак, если вы хотите запустить customSchema, убедитесь, что ваш файл config/database.json выглядит примерно так:
{
"production":
{
"driver": "memory",
},
"development":
{
"driver": "memory"
},
"test":
{
"driver": "memory"
}
}
Ваша customSchema НЕ будет работать, если у вас есть что-то вроде этого:
{
"production":
{
"driver": "mongoose",
"url": "mongodb://<user>:<pass>@localhost:<port>/<database>"
},
"development":
{
"driver": "mongoose",
"url": "mongodb://<user>:<pass>@localhost:<port>/<database>"
},
"test":
{
"driver": "memory"
}
}
по крайней мере, на момент написания этой статьи... Railwayjs все еще находится в разработке, поэтому я уверен, что все может измениться. я использую railwaysjs version 0.2.17-pre4
** еще одно предупреждение - если вы удалите "jugglingdb" - который является ORM, который упакован с железной дорогой - из вашей папки node_modules, то customSchema не будет вызываться. Я полагаю, что это потому, что jugglingdb тесно интегрирован в структуру railwaysjs. Я полагаю, что логика заключается в том, что автор фреймворка пытался имитировать ruby-on-rails, который, как мы знаем, тесно интегрирован с activeRecord.
Поэтому, даже если вы не используете jugglingdb и используете свою собственную пользовательскую схему (например, через mongoose или какой-либо другой ORM), не удаляйте jugglingdb.
Я зарегистрировал ошибку для этого: https://github.com/1602/express-on-railway/issues/212