使用RailwayJS来定义自定义模式的地方

文档只是简单地说“或者定义自定义模式(非杂耍),例如mongoose。请注意,在自定义模式的情况下,当然所有的jugglingdbfunction都将被禁用。

然而..

这个模式应该在哪里创build?

我相信你仍然可以在db / schema.js中创build它。 例如:

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例子工作。 我认为这个小小的提示可能会为其他人试图使用铁路运输的习俗节省很多的时间。

我把一个console.log("custom schema initialized");customSchema(function() {...})代码块中,我注意到console.log没有被触发……这显然意味着我的db/schema.js文件中的customSchema块甚至没有调用。

经过大量的调整之后,我意识到,在你的config/database.json文件中,你必须把驱动设置为“内存”(对于你想让customSchema运行的任何环境)。 例如,如果你将其设置为driver:“mongoose”,铁路将不会运行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" } } 

至less在写这篇文章的时候…铁路公司仍在开发中,所以我相信事情可能会改变。 我正在使用railwaysjs version 0.2.17-pre4

**另外需要注意的是,如果从node_modules文件夹中删除“jugglingdb” – 这是与铁路打包的ORM – 那么customSchema将不会被调用。 我相信这是因为“jugglingdb”紧密地集成到了铁路的框架中。 我想,理由是这个框架的作者试图模仿ruby-on-rails – 我们知道它是与activeRecord紧密集成的。

所以,即使你没有使用jugglingdb并且正在运行你自己的自定义模式(比如通过mongoose或其他的ORM),也不要删除jugglingdb。

我已经logging了这个错误: https : //github.com/1602/express-on-railway/issues/212