Criar uma app CRUD com Node.js + MongoDB (Parte 2)

14 Comentários

O Node.js é um interpretador de código JavaScript que funciona do lado do servidor. Esta plataforma permite aos programadores o desenvolvimento de aplicações em rede, em tempo real e de alta escalabilidade, de uma forma simples e rápida. O Node.js é baseado no interpretador V8 da Google.

Depois da instalação das dependências e criação de servidor, hoje vamos criar toda a estrutura de aplicação, definindo as Routes, os Controllers e o Modelo.

Criar uma app CRUD com Node.js + MongoDB


Organização da Aplicação (MVC)

A nossa aplicação deverá seguir o “design” MCV. M de Model (código para o nosso modelo de base de dados), V de View (layout) e C de controllers (parte lógica da app (Como a app lida com as solicitações recebidas e as respostas enviadas).

Existem também as Routes que indicam ao cliente (browser ou app mobile) qual o controller a usar, de acordo com o url/path solicitado.

Dentro da nossa pasta smartphones_app vamos então criar a seguinte estrutura (podem usar o comando mkdir -p controllers models routes views)

  • controllers
  • models
  • routes
  • views

Criar uma app CRUD com Node.js + MongoDB

Criar Modelo

Vamos começar por definir o nosso MODEL. Para isso vamos criar, dentro do diretório models, um ficheiro com o nome smartphones.model.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
let SmartphoneSchema = new Schema({
nome: {type: String, required: true, max: 100},
marca: {type: Number, required: true},
});
// Exportar o modelo
module.exports = mongoose.model('Smartphone', SmartphoneSchema);

Ao exportarmos o nosso modelo, podemos usá-lo em outros ficheiros do projeto. Com isto temos a parte M do design MVC concluída!

Criar Routes

Vamos criar, dentro do diretório routes, um ficheiro com o nome smartphones.route.js e colocar o seguinte código:

const express = require(‘express’);
const router = express.Router();
// Colocar controller que ainda não foi criado
const smartphone_controller = require(‘../controllers/smartphone.controller’);
// teste simples
router.get(‘/testar’, smartphone_controller.test);
module.exports = router;

Criar Controllers

const Smartphone = require('../models/smartphones.model');
exports.test = function (req, res) {
    res.send('Olá! Teste ao Controller');
};

Vamos agora ao ficheiro principal (index.js) e adicionar a route.

const express = require('express');
const bodyParser = require('body-parser');
const smartphone = require('./routes/smartphones.route'); // Importa rota
const app = express();
app.use('/smartphones', smartphones);

let porto = 8000;
app.listen(porto, () => {
    console.log('Servidor em execução no porto' + porto);
});

Testar

Para testarem basta usar o endereço localhost:8000/smartphones/testar (definido na Route). Se o resultado for o seguinte, então a sua primeira Route está a funcionar.
Criar uma app CRUD com Node.js + MongoDB

E o por hoje é tudo. Este tutorial é baseado no apresentado aqui. Num próximo tutorial vamos criar a base de dados e ligar o projeto à base de dados. Por fim, teremos também de criar os endpoints, que implementarão as funções definidas no CRUD.

Leia também…

Criar uma app CRUD com Node.js + MongoDB (Parte 1)

Comentários

14

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de jedi
    jedi

    Recomendo, que no mundo javascript e nodejs, comece a usar VS Code, para ter melhor intellsense, etc.

    o Brackets é muito limitado, comparado com vscode.

    1. Avatar de João Cavaleiro
      João Cavaleiro

      +1

  2. Avatar de Beatriz Gosta
    Beatriz Gosta

    Obrigada Pedro. Encontrei o original ao pesquisar por um erro que me deu e achei interessante

  3. Avatar de dc
    dc

    Em ambos os tutoriais há um erro: defini-se uma variável ‘porto’ e depois usa-se uma variável ‘port’ ao inicializar o servidor. (index.js)
    Tendo em conta que maioria dos conceitos usados são em inglês (que acho bem), devia-se evitar a mistura de português com inglês (manter port e não porto).

    1. Avatar de dc
      dc

      Deve-se também trocar os ‘let’ e o ‘var’ por ‘const’ visto as variáveis em causa não serem re-definidas.

      1. Avatar de jedi
        jedi

        somete o var por const caso nao altere o valor .

        let por var, caso o valor futuramente seja alterado.

        ou seja, Let ou const por var;

        1. Avatar de jedi
          jedi

          *enganei-me, ao contrario, como é obvio,

          var por const ou let.

          😉

          1. Avatar de Pedro Pinto

            Sim, mas não ha mal nenhum usar var (nao o do futebol) neste caso.

  4. Avatar de jedi
    jedi

    @PedroPinto,

    as boas práticas de javascript, não é isso que aconselha, muito menos na especificação mais moderna do javascript, es6 (es2015+)

    Aliás, é ainda mais recomendado quando se está a programar javascript, no seu ambiente nativo / de origem, que é para os browsers, por causa do global scope.

    Aconselho, vivamente a que pesquise o que é o global scope e local scope em javascript. Para quê que foram criados let e const.

    Em nodejs também esse problema, mas não é tao grave por causa de commonjs, que isola os ficheiros em modulos.

    Por isso, quando se faz artigos deste tipo, aconselha-se muita atenção às boas práticas de cada tecnologia, semelhante a quem está a conduzir um carro, não beber nem utilizar telemóvel enquanto se está a conduzir.

    Obrigado pelo artigo, mais são bem vindos.

    1. Avatar de Devsys
      Devsys

      O velho problema das variáveis em JavaScript, e ainda nem chegamos à conversa sobre os tipos.

  5. Avatar de sakura
    sakura

    Ok, agora sei que não sei nada de nodejs……
    Sem o VS code não resolvia o problema.
    const express = require(‘express’);// Invalid character.ts(1127)
    PQ, se a linha for copy/past da erro, escrita a não está ok?
    15min…e ctrl-s +++ node -c index.js para ver que o caráter
    está errado… nunca fazer copy/past.

    1. Avatar de Jorge
      Jorge

      Deves estar a copiar “caracteres escondidos”. Coloca o paste no notepad (sim notepad e nao notepad++ etc)

      1. Avatar de sakura
        sakura

        As strings são !=.
        (‘express’) em Routes é != (‘express’) em Controllers