如何用node-orm导出模型?

我正在testingnode-orm ,我找不到导出模型的正确方法。 这里是模型定义(./models/user.js):

var orm = require('orm'); var db = orm.connect('pg://user@localhost/accounts', function(success, db) { if (!success) { console.log('Could not connect to database.'); return; } var User = db.define('user', { ... // Model schema }); module.exports = User; }); 

当我尝试在别处使用它(例如./app.js)时:

 var User = require('./models/user'); ... app.get('/test', function(req, res) { var user = new User({ ... }); user.save(function(err, user) { ... }); ... }); 

原来,用户是一个空的对象,所以节点不能调用模型的构造函数。 用node-orm导出模型的正确方法是什么? 这可能很简单,但我在文档中find任何东西…

你的问题是你在callback函数中设置你的module.exports 。 节点的模块加载系统明确指出,你不能这样做。

orm-node模块使用您为模型指定的名称将模型存储在模块导出中。 你的例子应该工作,如果你改变你的app.js阅读:

 require('./models/user'); var orm = require('orm'); ... app.get('/test', function(req, res) { var user = new orm.user({ ... }); user.save(function(err, user) { ... }); ... }); 

还要注意,因为你的模型是在callback中被初始化的,所以在你require()你的模型模块之后,它不会立即可用。 据推测,在你需要处理get /user之前,你将完成数据库连接和模型初始化。

可能最安全的方式来处理所有这些将确保您的应用程序初始化和listen()完成作为orm.connect()callback的一部分。

这是我如何用light-orm做的 :

 var ORM = require('light-orm'); var AdsCollection = new ORM.Collection({ connector: ORM.driver, tableName: 'ads' }); module.exports = AdsCollection; 

应该和你的ORM很相似。 由于魔术问题和复杂性,我已经从node-orm移植到了light-orm 。 您也可以查看light-orm: https : //npmjs.org/package/light-orm