如何创建将在adonis的多个控制器中使用的方法?

时间:2019-10-16 20:44:57

标签: node.js adonis.js

我有将在多个控制器中使用的这种方法。如何使该方法可共享?

如果我不得不使用服务提供商或特质,我会有些困惑...

async verificaExisteUsuarioAdministrador(){
    const checkUserAdmin = await User
           .findBy('username', 'admin')

            if (checkUserAdmin ){
                return true
            }else{
                return false
            }
}

因此,在多个控制器中,我需要调用此函数,如何使之成为可能?服务提供商的文档看起来不太清楚。

1 个答案:

答案 0 :(得分:1)

我建议您创建一个中间件。

AdonisJS - Middleware documentation

您可以将其配置为在控制器代码之前或之后运行。

示例

中间件:

'use strict'
/** @typedef {import('@adonisjs/framework/src/Request')} Request */
/** @typedef {import('@adonisjs/framework/src/Response')} Response */
/** @typedef {import('@adonisjs/framework/src/View')} View */

class AuthVerif {
  /**
   * @param {object} ctx
   * @param {Request} ctx.request
   * @param {Function} next
   */
  async handle({ response, auth }, next) {
    // call next to advance the request

    /* Your code */

    await next()// Controller execution
  }
}

module.exports = AuthVerif

路线:

Route.get("/", "youController").middleware(["authVerif"])

OR

您可以创建助手(app/Helpers/

示例(app/Helpers/Answer.js):

'use strict'

/**
 * @summary API answer convention
 */
class Answer {
    /**
     * Success answer
     * @param {*} data 
     * @returns {JSON} JSON answer
     */
    static success(data) {
        return { 'success': true, 'data': data }
    }
}

module.exports = {
    Answer
}

导入对象(控制器,...):

/** @type {typeof import('../Helpers/Answer')} */ //Documentation
const { Answer } = use('App/Helpers/Answer')