node.js - 如何使用 node-orm 导出模型?

标签 node.js orm models

我正在测试 node-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) {
    ...
  });

  ...
});

原来 User 是一个空对象,因此 Node 无法调用模型构造函数。使用 node-orm 导出模型的正确方法是什么?这可能很简单,但我在文档中找到了任何内容……

最佳答案

您的问题是您在回调函数中设置了 module.exports。 Node 的 module loading system特别声明你不能那样做。

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) {
    ...
  });

  ...
});

另请注意,因为您的模型是在回调中初始化的,所以在您 require() 模型模块后它不会立即可用。据推测,在您需要处理 /user 的获取之前,您已经完成了数据库连接和模型初始化。

处理所有这些问题的最安全方法可能是确保您的应用程序初始化和 listen() 作为 orm.connect() 回调的一部分完成.

关于node.js - 如何使用 node-orm 导出模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10103338/

相关文章:

javascript - 为什么 browser.get 方法没有转到指定的 url?

javascript - TypeORM 插入与relationId

java - Ormlite 查询生成器条件

python - Django:覆盖保存(模型或管理部分)

node.js - async.forEach NodeJS 中的暂停/超时

node.js - 保护 Socket.io

python - Django 使用 Through 表属性进行查询

python - 将相关项目组织成组的模式

node.js - Node js中构造函数内部的对象解构以将值分配给成员变量不起作用

mysql - Laravel BelongsToMany 方法不返回任何内容