文档只是说“或定义自定义模式(非杂耍),例如猫鼬。请注意,在自定义模式的情况下,所有 jugglingdb 功能当然都将被禁用。”
然而..
这个模式到底应该在哪里创建?
文档只是说“或定义自定义模式(非杂耍),例如猫鼬。请注意,在自定义模式的情况下,所有 jugglingdb 功能当然都将被禁用。”
然而..
这个模式到底应该在哪里创建?
我相信你仍然可以在 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 示例正常工作时遇到了类似的问题。我认为这个小技巧可能会为其他尝试使用 railjs customchemas 的人节省大量时间。
在代码块中放入 aconsole.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"
}
}
至少在撰写本文时... railjs 仍在开发中,所以我确信事情可能会改变。我正在使用railwaysjs version 0.2.17-pre4
** 还有一个警告 - 如果你从你的 node_modules 文件夹中删除 'jugglingdb' - 这是与 rail 一起打包的 ORM - 然后 customSchema 将不会被调用。我相信这是因为 'jugglingdb' 紧密集成到 railsjs 框架中。我猜,基本原理是该框架的作者试图模仿 ruby-on-rails——我们知道它与 activeRecord 紧密集成。
因此,即使您没有使用 jugglingdb 并且正在运行您自己的自定义模式(例如通过 mongoose 或其他一些 ORM),也不要删除 jugglingdb。
我为此记录了一个错误: https ://github.com/1602/express-on-railway/issues/212