I am using node & express (framework for node). I wan't to use the node-orm2 framework for node for communicating with my MySQL database. To keep a nice structure I want to split up my models in separated files. I've been using the documentation on github but somehow I can't make it work.
app.js:
app.use(orm.express("mysql://********:********@localhost/*********",
{
define: function(db, models){
db.load('./models', function(err){
models.movie = db.models.Movie;
});
}
}));
models.js:
module.exports = function (db, fn) {
db.load("movie", function (err) {
if (err) {
return fn(err);
}
});
//etc
return fn();
};
movie.js:
module.exports = function (db, fn) {
db.define('movie', {
id : { type: "number" },
title : { type: "text" },
year : { type: "number" },
rating : { type: "number" },
description : { type: "text" }
}, {
methods : {
}
});
return fn();
};
Copied help from github issue tracker (from lastmove):
I am using the built in express middleware. It works fine for me. I have a folder Model. With one file par model. Example the user model: user.js
module.exports = function(db, cb)
{
var User = db.define('user', {
userName : String,
password : String,
mail : String,
mark : Number,
lastAlertSent : Date,
subscriptionDate : Date,
lastAction : Date,
specialUser : Boolean,
uuid : String
},
{
validations:
{
userName : [orm.enforce.required(error.errorStr(error.missingRequiredField, "userName missing")), orm.enforce.unique({ ignoreCase: true }, error.errorStr(error.usernameAlreadyUsed, "userName already used")), orm.enforce.ranges.length(3, undefined, error.errorStr(error.usernameTooShort, "userName too shoty"))],
...
And in the Models folder i have an index.js In this file i define the relations betweens my models, and I load my models.
File: models/index.js
checkError = function(cb, err)
{
if (err)
return cb(err);
return cb();
}
module.exports = function(db, cb)
{
db.load("./user.js", function (err) {checkError(cb, err)});
db.load("./alert.js", function (err) {checkError(cb, err)});
db.load("./comment.js", function (err) {checkError(cb, err)});
db.load("./metropole.js", function (err) {checkError(cb, err)});
db.load("./period.js", function (err) {checkError(cb, err)});
db.load("./stop.js", function (err) {checkError(cb, err)});
db.load("./line.js", function (err) {checkError(cb, err)});
db.load("./types.js", function (err) {checkError(cb, err)});
db.load("./historique.js", function(err) {checkError(cb, err)});
var User = db.models.user;
var Alert = db.models.alert;
var Comment = db.models.comment;
var Metropole = db.models.metropole;
var Stop = db.models.stop;
var Line = db.models.line;
var Period = db.models.period;
var Types = db.models.types;
var Hist = db.models.historique;
Alert.hasOne("stop", Stop, {reverse : "alerts"});
Alert.hasOne("line", Line, {reverse : "alerts"});
and after all in my Express initialization i add this:
app.use(orm.express(opts, {
define: function (db, models, next) {
db.load("./models/models", function (err2)
{
if (err2)
throw err2;
db.sync();
})
next();
}