NodeJS: Babysteps! #07 - Banco de dados

in #nodejs4 years ago

Projeto: https://github.com/wouerner/nodejs-express


Vamos clonar o projeto:

git clone --depth 1 --branch v1.0.5 git@github.com:wouerner/nodejs-express.git

Vamos para dentro da pasta do projeto:

cd nodejs-express 

Vamos editar o app.js e adicionar a conexão com banco de dados:

nvim app.js 
const express = require('express');
const mongoose = require('mongoose');

mongoose.connect('mongodb://db:27017/book', { useNewUrlParser: true });

var bookRouter = require('./routes/index');

const app = express();

app.use('/', bookRouter);

module.exports = app;

Vamos editar apenas o metodo index, buscando da base de dados, deve retornar vazio.
Vamos editar o controllers/bookController.js:

nvim controllers/bookController.js
const BookModel = require('../models/Book');

exports.index = async (req, res)=> {
    let books = await BookModel.find({});

    res.json(books);
};

exports.show = function(req, res) {
    const books = {"name" : "book"};
    res.json(books);
};

exports.store = function(req, res) {
    const books = {"message": "Criado!", "data":{"name" : "book"}};
    res.json(books);
};

exports.update = function(req, res) {
    const books = {"message": "Atualizado!", "data":{"name" : "book"}};
    res.json(books);
};

exports.del = function(req, res) {
    const books = {"message": "Excluido!", "data":{"name" : "book"}};
    res.json(books);
};

Vamos adicionar nossa model do Books.
Vamos criar o Book.js

mkdir models
nvim models/Book.js
const mongoose = require('mongoose');
const { Schema } = mongoose;

const bookSchema = new Schema({
  name: {
    type: String,
    required: true
  },
});

module.exports = mongoose.model('books', bookSchema);

Precisamos adicionar no docker-compose o banco de dados.
Vamos editar o docker-compose.yml:

nvim docker-compose.yml
version: '3'

services:
  nodejs-express:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: nodejs-express
    volumes:
      - ./:/app
      - /app/node_modules
    ports:
      - "3000:3000"

  db:
    image: 'mongo'
    container_name: mongodb
    ports:
      - '27017:27017'
    volumes:
      - /data/db

Vamos adicionar a dependencia do mongoose.
Vamos editar o package.json:

nvim package.json
const express = require('express');

{
  "name": "nodejs",
  "version": "0.0.1",
  "description": "Node.js on Docker + docker-compose + nodemon",
  "author": "Wouerner <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js",
    "start-dev": "./node_modules/nodemon/bin/nodemon.js .",
    "test": "./node_modules/jest/bin/jest.js ."
  },
  "dependencies": {
    "express": "^4.16.1",
    "mongoose": "^6.1.1"
  },
  "devDependencies": {
    "jest": "^27.3.1",
    "nodemon": "^1.19.4",
    "supertest": "^6.1.6"
  }
}

Vamos iniciar os containers:

docker-compose up --build

video


docker-compose up --build

Projeto finalizado para consulta!
Pode fazer o clone e analisar!

git clone --depth 1 --branch v1.0.6 git@github.com:wouerner/nodejs-express.git