2
respostas

Como o meu arquivo da API identifica o método a ser acionado?

Analisando o código, não consegui identificar onde que é passado o método a ser acionado para minha API, funciona tudo corretamente, porém não consegui identificar como a API identifica se esta efetuando uma alteração, uma inclusão. etc.?

2 respostas

Fala ai Ruan, beleza?

Poderia postar um código de exemplo para eu dar uma olhada?

Fico no aguardo

Opa, fala Matheus, beleza.

Segue os códigos da controller, service, do arquivo express, da api e do route que é acionado pela API

Controller

angular.module('alurapic')
    .controller('FotoController', function($scope, recursoFoto, $routeParams, cadastroDeFotos) {

        $scope.foto = {};
        $scope.mensagem = '';

        if($routeParams.fotoId) {
            recursoFoto.get({fotoId: $routeParams.fotoId}, function(foto) {
                $scope.foto = foto; 
            }, function(erro) {
                console.log(erro);
                $scope.mensagem = 'Não foi possível obter a foto'
            });
        }

        $scope.submeter = function() {

            if ($scope.formulario.$valid) {
                cadastroDeFotos.cadastrar($scope.foto)
                .then(function(dados) {
                    $scope.mensagem = dados.mensagem;
                    if (dados.inclusao) $scope.foto = {};
                })
                .catch(function(erro) {
                    $scope.mensagem = erro.mensagem;
                });
            }
        };
    });

Service

angular.module('meusServicos', ['ngResource'])
    .factory('recursoFoto', function($resource) {

        return $resource('/v1/fotos/:fotoId', null, {
            'update': {
                method: 'PUT'
            }
        });
    })
    .factory("cadastroDeFotos", function(recursoFoto, $q) {
        var service = {};
        service.cadastrar = function(foto) {
            return $q(function(resolve, reject) {

                if (foto._id) {
                    recursoFoto.update({ fotoId: foto._id }, foto, function() {
                        resolve({
                            mensagem: 'Foto ' + foto.titulo + ' atualizada com sucesso',
                            inclusao: false
                        });
                    }, function(erro) {
                        console.log(erro);
                        reject({
                            mensagem: 'Não foi possível atualizar a foto ' + foto.titulo
                        });
                    });

                } else {
                    recursoFoto.save(foto, function() {
                        resolve({
                            mensagem: 'Foto ' + foto.titulo + ' incluída com sucesso',
                            inclusao: true
                        });
                    }, function(erro) {
                        console.log(erro);
                        reject({
                            mensagem: 'Não foi possível incluir a foto ' + foto.titulo
                        });
                    });
                }
            });
        };
        return service;
    });

Express.js

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

app.use(express.static('./public'));

/* require('../app/routes/fotos')(app);
require('../app/routes/grupo')(app); */
/* require('../app/config/conect')(app); */

app.use(bodyParser.json());

consign({ cwd: 'app' })
    .include('api')
    .then('routes')
    .into(app);

module.exports = app;

API

var api = {};
var contador = 2;
var fotos = [
    { _id: 1, titulo: 'Aguia', url: 'http://www.fundosanimais.com/imagens-aguia-gigante-jpg' },
    { _id: 2, titulo: 'Aguia2', url: 'http://www.fundosanimais.com/imagens-aguia-gigante-jpg' }
];
console.log('entrou na api', api);
api.lista = function(req, resp) {

    resp.json(fotos);
    resp.end('lista de fotos');
    console.log('obtendo fotos');
};

api.buscaPorId = function(req, resp) {
    /* req.params._id */
    var foto = fotos.find(function(foto) {
        return foto._id == req.params.id;
    });
    resp.json(foto);
}

api.removePorId = function(req, resp) {
    fotos = fotos.filter(function(foto) {
        return fotos._id != req.params.id;
    });
    resp.sendStatus(204);
};

api.adiciona = function(req, resp) {
    var foto = req.body;
    foto._id = ++contador;
    /* foto._id = (fotos.length + 1); */
    console.log(foto._id);
    console.log(req.body);
    fotos.push(foto);

    resp.json(foto);
};

api.atualiza = function(req, resp) {
    var foto = req.body;
    var fotoId = req.params.id;

    var indice = fotos.findIndex(function(foto) {
        return foto._id == fotoId;
    });
    fotos[indice] = foto;
    resp.sendStatus(200);

};

module.exports = api;

Route

/* var api = require('../api/foto'); */
module.exports = function(app) {

    var api = app.api.foto;
    console.log('testees 2', api);
    app.route('/v1/fotos')
        .get(api.lista)
        .post(api.adiciona);

    app.route('/v1/fotos/:id')
        .get(api.buscaPorId)
        .delete(api.removePorId)
        .put(api.atualiza);
};

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software