Reputation: 1055
I have this method that I will use in more than 1 controller. How can I make this method sharable?
I'm a little confused if I have to use service providers or traits...
async verificaExisteUsuarioAdministrador(){
const checkUserAdmin = await User
.findBy('username', 'admin')
if (checkUserAdmin ){
return true
}else{
return false
}
}
So, in more than one controller I need to call this function, how can I make this possible? The service providers document don't look so clear.
Upvotes: 1
Views: 1645
Reputation: 2302
I advise you to create a middleware.
AdonisJS - Middleware documentation
You can configure it to run before or after the controller code.
middleware :
'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 :
Route.get("/", "youController").middleware(["authVerif"])
You can create Helpers (app/Helpers/
)
Example (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
}
Import object (controllers, ...):
/** @type {typeof import('../Helpers/Answer')} */ //Documentation
const { Answer } = use('App/Helpers/Answer')
Upvotes: 3