Adonisjs - 继承(基础/管理员/前端控制器)

时间:2017-11-27 08:57:25

标签: node.js inheritance adonis.js

我是Adonisjs框架的新手。我一直在使用这个很棒的框架开发我的第一个nodejs应用程序。我一直在尝试创建像

这样的应用程序结构
  • 基地
  • 管理员扩展基地
  • Front extends Base

为此,我尝试创建一个基类(app / Http / Controllers / BaseController.js),如下所示:

'use strict'

class BaseController {
    constructor () {

        [...]

    }
}

module.exports = BaseController

Admin class(app / Http / Controllers / AdminController.js)

'use strict'

const BaseController = use('BaseController')

class AdminController extends BaseController {
    constructor () {

        [...]

    }
}

module.exports = AdminController

前级(app / Http / Controllers / FrontController.js)

'use strict'

const BaseController = use('BaseController')

class FrontController extends BaseController {
  constructor () {

        [...]  

  }
}

module.exports = FrontController

但是我在Admin和Front控制器上都收到此错误Cannot find module 'BaseController'。我只需要一个关于如何在adonisjs框架中创建基本继承类结构的提示/示例。

1 个答案:

答案 0 :(得分:1)

我假设您使用的是框架的最新版本4.0:

adonis.js Ioc容器会自动加载应用目录的内容,并在" App"命名空间(参见Adonis.js 4.0 > Ioc container > Autoloading)。文件" app / Http / Controllers / BaseController.js"的导出因此可以在名称" App / Http / Controllers / BaseController"下获得。

所以对你的例子来说:

'use strict'

const BaseController = use('App/Http/Controllers/BaseController') // <--

class AdminController extends BaseController {
    constructor () {
        [...]

    }
}

module.exports = AdminController

如果你真的想使用没有命名空间的控制器(我不推荐)你可以通过在&#34; start / app.js&#34;中添加一个别名来为它们引入一个简短的唯一名称。配置文件:

...
const aliases = {
  'BaseController': 'App/Http/Controllers/BaseController'
}
...

之后,您可以通过调用:

来要求控制器类
use('BaseController')

注意:不要忘记将super()放在子类的构造函数中:

constructor () {
    super()
}