3
respostas

Configurar erro para requisições com content type invalido

Alguém sabe me dizer como eu posso retornar um erro para o cliente quando ele solicitar algo na api mas nao configurar o content-type correto? queria que retorna-se algo parecido com isso.

{
  "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html",
  "title": "Unsupported Media Type",
  "status": 415,
  "detail": "Invalid content-type specified"
}
3 respostas

através do response, vc pode setar o status para 415 e adicionar esses headers que vc especificou. Parecido com o que acontece quando falha a validação dos dados.

Isso eh uma solução elegante ou posso fazer de uma forma melhor?

var express    = require('express');
var consign    = require('consign');
var bodyParser = require('body-parser');

module.exports = function () {

    var app = express()
    app.use(bodyParser.json());

    app.use('/', function(req, res, next)
    {
        var method = req.method;
        var contype = req.headers['content-type'];

        if(method != 'POST')
        {
            return res.send({
                "type": "https://en.wikipedia.org/wiki/List_of_HTTP_status_codes",
                "title": "Metodo não permitido",
                "status": 405,
                "detail": "O Method GET utilizado não é permitido!"
            },405);
        }

        if (!contype || contype.indexOf('application/json') !== 0)
            return res.send({
                "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html",
                "title": "Media Type não suportado",
                "status": 415,
                "detail": "O content-type especificado é invalido!"
            },415);
        next();
    });

    consign()
        .include('controllers')
        .into(app);

    return app
}

em vez de use, acho que vc já podia o método post e deixar o express proibir o uso do verbo errado para vc... em relação ao content-type, acho ok.