Na aula 5.2 é implementado a validação do cabeçalho através da chave Accept. Neste caso, quando eu tento realizar a requisição no Postman sem informar a chave Accept ou informando-a com o valor correto application/json
, eu recebo o retorno corretamente. No entanto, se eu informar o valor application/xml
, o Postman fica em um loop sem retornar o status 406
:
Obs: No terminal do VSCode não apresenta nenhum erro.
Já vi e revi o video da aula e não localizo o erro. Eu continuei o curso pois pensei que fosse algo temporário, mas não está resolvendo, portanto o meu código já está com as aulas seguintes. De qualquer forma, segue para confirmação de que o mesmo está de acordo com a aula apresentada:
Serializador.js:
const ValorNaoSuportado = require('./erros/ValorNaoSuportado')
class Serializador {
json (dados) {
return JSON.stringify(dados)
}
serializar (dados) {
if (this.contentType === 'application/json') {
return this.json(
this.filtrar(dados)
)
}
throw new ValorNaoSuportado(this.contentType)
}
filtrarObjeto (dados) {
const novoObjeto = {}
this.camposPublicos.forEach((campo) => {
if (dados.hasOwnProperty(campo)) {
novoObjeto[campo] = dados[campo]
}
})
return novoObjeto
}
filtrar (dados) {
if (Array.isArray(dados)) {
dados = dados.map(item => {
return this.filtrarObjeto(item)
})
} else {
dados = this.filtrarObjeto(dados)
}
return dados
}
}
class SerializadorFornecedor extends Serializador {
constructor(contentType) {
super()
this.contentType = contentType
this.camposPublicos = [
'id',
'empresa',
'categoria']
}
}
module.exports = {
Serializador: Serializador,
SerializadorFornecedor: SerializadorFornecedor,
formatosAceitos: ['application/json']
}
Index.js:
const express = require('express')
const app = express()
const bodyParser = require('body-parser')
const config = require('config')
const NaoEncontrado = require('./erros/NaoEncontrado')
const CampoInvalido = require('./erros/CampoInvalido')
const DadosNaoFornecidos = require('./erros/DadosNaoFornecidos')
const ValorNaoSuportado = require('./erros/ValorNaoSuportado')
const formatosAceitos = require('./Serializador').formatosAceitos
//app.use(bodyParser.json())
app.use(express.json())
app.use(express.urlencoded({ extended: true}))
app.use((requisicao, resposta, proximo) => {
let formatoRequisitado = requisicao.header('Accept')
if (formatoRequisitado === '*/*') {
formatoRequisitado = 'application/json'
}
if (formatosAceitos.indexOf(formatoRequisitado) === -1) {
resposta.status(406)
resposta.end
return
}
resposta.setHeader('Content-Type', formatoRequisitado)
proximo()
})
const roteador = require('./rotas/fornecedores')
app.use('/api/fornecedores', roteador)
app.use((erro, requisicao, resposta, proximo) => {
let status = 500
if (erro instanceof NaoEncontrado) {
status = 404
}
if (erro instanceof CampoInvalido || erro instanceof DadosNaoFornecidos) {
status = 400
}
if (erro instanceof ValorNaoSuportado) {
status = 406
}
resposta.status(status)
resposta.send(
JSON.stringify ({
mensagem: erro.message,
id: erro.idErro
})
)
})
app.listen(config.get('api.porta'), () => console.log('A API está funcionando!'))
Alguém pode me dar um help para entender o que está passando batido por mim? Obrigado desde já.