在AdonisJS控制器之外使用Lucid

时间:2017-02-24 21:42:11

标签: node.js adonis.js

我正在使用AdonisJS构建项目,我想将其构建为模块化的两部分应用程序:AdonisJS服务器运行控制面板,该服务器外部的自定义脚本运行IRC机器人。我一直在尝试将Lucid加载到第二个脚本中,以便我可以与我的数据库进行交互,但它只返回一个空对象{}。有些事情需要注意:

  • 我确保我的数据库已填充。
  • 我在我的控制器中测试了可以正常工作的代码并按预期获取结果。
  • 辅助脚本将所有与Adonis相同的部分启动为server.js,而不是实际的HTTP服务器。
  • 我尝试将此脚本附加到HTTP服务器,但没有区别。
  • 我也尝试使用相同的结果创建原始QueryBuilder对象。

这里我可以将最少量的代码放在一起作为例子:

#!/usr/bin/node
'use strict'

const fs = require('fs')
const bootstrap = require('./bootstrap/bot')

bootstrap(() =>
{
    const AppConfig = use('AppConfig')
    const Settings = use('App/Model/Settings')

    const get_settings = function * () {
        yield Settings.all()
    }

    console.log(get_settings())
})

console.log()打印{},即使在控制器中调用的相同代码也会打印设置表中的所有条目。 bootstrap/bot.js几乎是bootstrap/http.js的完全复制品。唯一的区别是它没有启动HTTP服务器。

我已经搜索了源代码,寻找在启动服务器和运行控制器代码之间可能发生的事情,看看是否有一些关键的东西我错过了,但我迷失了

有没有人知道如何在AdonisJS控制器的范围之外使用我的Lucid模型?

1 个答案:

答案 0 :(得分:1)

这是因为您的功能是generator,您只能使用yield关键字调用生成器。

因此,console.log()应该看起来像console.log(yield get_settings())

您可以使用包co来创建根生成器函数。

bootstrap(co(function * () {
  // ...
}))