Express、 orm、および sqlite3を使用するノード プロジェクトがあります。
私は複数のモデルを持っています。現在、各モデルは次のように宣言されています。
var orm = require('orm');
var db = orm.connect({database: ':memory:', protocol: 'sqlite'});
var schema = db.define('service', {
uptime: Number,
// ...
});
db.sync(function (err) {
!err && console.log("db synced!");
});
module.exports = schema;
何度も要求して接続するのに、1ダースのモデルで特に楽しいことはありません。
app.js
で接続してモデルをロードし、ルートで通常どおりに使用できるように、整理したいと思います。しかし、私はそれを機能させることができません。これは私がやっていることです:
まず、接続を定義し、モデルを定義しますapp.js
。
var service;
orm.connect(app.get('db-opt'), function(err,db){
!err && console.log("db connected!");
if (err){
throw err;
}
db.load('./models', function(err){
app.service = service = db.models.service;
!err && console.log("models loaded!");
});
db.sync(function(err){
!err && console.log("db synced!");
});
});
models/index.js
ファイルは次のようになります。
module.exports = function(db,fn){
db.define('service', {
uptime: Number,
// ...
});
return fn();
};
そして、routes/services.js
次のようになります。
var services = [];
exports.list = function(service){
return function(req, res){
service.find({}, function(err, services){
if (err){
return next(err);
}
res.render('services', {
title: 'Services',
services: services
});
});
};
};
最後に、app.js で次のようにルートを接続します。
app.get('/services', services.list(service));
予期されるコンソール メッセージが表示されますが、アクセスしようとするとすぐに次のエラーが表示されます:
TypeError: Cannot call method 'find' of undefined
.
と service.list を渡そうapp.service
とmodels.service
しましたが、どちらも同じエラーを出して動作しません。
モデルをクリーンにロードし、それらを必要とするルートにアクセスできるようにするにはどうすればよいですか?
更新db.load
:次のコードで呼び出しが機能していることを証明できます。
db.load('./models', function(err){
var services = [];
service = db.models.service;
service.find({}, function(err, services) {
if (err){
throw err;
}
});
!err && console.log("models loaded!");
});
これが与えるようにError: SQLITE_ERROR: no such table: service