-1

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.servicemodels.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

4

1 に答える 1