Atualizando da versão 4.0
A versão 4.1 contém uma série de correções de bugs e melhorias de API para manter a base de código simples e menos mágica. Mudanças drásticas foram mantidas no mínimo, no entanto, elas não puderam ser eliminadas completamente.
Começando
O primeiro passo é atualizar todas as dependências.
Usamos npm-check para extrair as versões mais recentes dos pacotes:
npm install -g npm-checkExecute o seguinte comando para atualizar as dependências interativamente:
npm-check -uTratamento de exceções
Uma das mudanças mais significativas foi no manipulador de exceções global.
OBSERVAÇÃO: se você nunca criou o manipulador de exceções global, sinta-se à vontade para ignorar esta seção.
Faça as seguintes alterações no arquivo app/Exceptions/Handler.js.
Certifique-se de que seu manipulador de exceções estenda o
BaseExceptionHandler:jsconst BaseExceptionHandler = use('BaseExceptionHandler') class ExceptionHandler extends BaseExceptionHandler { }Chame
super.handlepara exceções que você não deseja manipular:jsclass ExceptionHandler extends BaseExceptionHandler { async handle (error, { response }) { if (error.name === 'UserNotFoundException') { // handle it yourself return } super.handle(...arguments) } }Por fim, você pode remover chamadas
Exception.bindda sua base de código, pois todas as exceções serão roteadas para o manipulador de exceções global.
Roteamento
Route.url
Route.url gera uma URL totalmente qualificada para uma rota pré-registrada.
Anteriormente, domain era passado como uma string literal.
domain agora é aceito como um objeto.
Anteriormente:
Route.url('posts/:id', { id: 1 }, 'blog.adonisjs.com')Agora:
Route.url('posts/:id', { id: 1 }, { domain: 'blog.adonisjs.com' })Validador
O provedor do validador agora usa a versão mais recente do Indicative, causando as seguintes alterações de interrupção.
formatadores
O conceito de formatadores nomeados não existe mais.
Se você quiser usar um formatador pré-existente, em vez de passar por nome, agora você deve passar por referência.
Anteriormente:
const { validate } = use('Validator')
validate(data, rules, messages, 'jsonapi')Agora:
const { validate, formatters } = use('Validator')
validate(data, rules, messages, formatters.JsonApi)O mesmo se aplica aos validadores de rota também.
Anteriormente:
class StoreUser {
get formatter () {
return 'jsonapi'
}
}Agora:
const { formatters } = use('Validator')
class StoreUser {
get formatter () {
return formatters.JsonApi
}
}configure
A nova versão do Indicative expõe o método configure para definir padrões de toda a biblioteca:
const { formatters, configure } = use('Validator')
configure({
FORMATTER: formatters.JsonApi
})Visualizações
css
O global css foi alterado para style. O global css não é mais suportado
Anteriormente
{{ css('style') }}Agora
{{ style('style') }}Lucid
Anteriormente, a formatação de data era inconsistente com registros recém-criados e registros existentes.
Isso foi corrigido na versão mais recente com uma pequena alteração de quebra (leia o problema relacionado).
dates
Os campos de data não são mais convertidos para instâncias moment na instância do modelo.
Anteriormente:
const user = await User.find(1)
user.created_at instanceof moment // trueAgora:
const user = await User.find(1)
user.created_at instanceof moment // falseEssa alteração impede que você altere a data na instância do modelo diretamente e, em vez disso, use o hook castDates para alterar a data ao serializar as propriedades do modelo.
O hook castDates funciona como antes:
class User extends Model {
static castDates (field, value) {
if (field === 'dob') {
return `${value.fromNow(true)} old`
}
return super.formatDates(field, value)
}
}Goodies
Várias correções de bugs foram aplicadas para manter a base de código confiável.
Além disso, algumas melhorias de desempenho foram implementadas.
Validator
Como o Indicative foi reescrito do zero, a nova versão é 2x mais rápida do que era anteriormente.
Middleware
O middleware agora é resolvido pela camada de análise de middleware no momento da inicialização do aplicativo, instanciando uma nova instância deles para cada solicitação (anteriormente, o processo resolve era usado para cada solicitação).
Erros melhores
Os erros agora aparecerão bem formatados no seu terminal, conforme mostrado abaixo:
