我如何创建一种方法,我将在 adonis 的多个控制器中使用?
How can I create a method that I will use in more than 1 controller in adonis?
我有这个方法,我将在不止 1 个控制器中使用。如何使此方法可共享?
如果我必须使用服务提供者或特征,我有点困惑...
async verificaExisteUsuarioAdministrador(){
const checkUserAdmin = await User
.findBy('username', 'admin')
if (checkUserAdmin ){
return true
}else{
return false
}
}
那么,在不止一个控制器中我需要调用这个函数,我该如何实现呢?服务提供者文档看起来不太清楚。
我建议你创建一个中间件。
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')
我有这个方法,我将在不止 1 个控制器中使用。如何使此方法可共享?
如果我必须使用服务提供者或特征,我有点困惑...
async verificaExisteUsuarioAdministrador(){
const checkUserAdmin = await User
.findBy('username', 'admin')
if (checkUserAdmin ){
return true
}else{
return false
}
}
那么,在不止一个控制器中我需要调用这个函数,我该如何实现呢?服务提供者文档看起来不太清楚。
我建议你创建一个中间件。
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')