Где определить пользовательскую схему с помощью 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

Другие вопросы по тегам