我有将在多个控制器中使用的这种方法。如何使该方法可共享?
如果我不得不使用服务提供商或特质,我会有些困惑...
async verificaExisteUsuarioAdministrador(){
const checkUserAdmin = await User
.findBy('username', 'admin')
if (checkUserAdmin ){
return true
}else{
return false
}
}
因此,在多个控制器中,我需要调用此函数,如何使之成为可能?服务提供商的文档看起来不太清楚。
答案 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"])
您可以创建助手(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')