Code Monkey home page Code Monkey logo

expressapp's Introduction

Autor: Fábio Delgado

Olá! Seja bem vindo ;)

Índice

  1. ExpressApp
  2. Projeto e Conteúdo
  3. Swagger
  4. JWT
  5. MongoDB e Mongoose
  6. SMTP
  7. Jest
  8. Suporte

ExpressApp

Este repositório contém uma implementação que orientará você na criação de um aplicativo de básico contendo autenticação, documentação e integração com banco de dados utilizando NodeJS, com o Framework Express e banco de dados MongoDB

Como executar essa aplicação?

Para executar essa aplicação, primeiro é necessário instalar o NodeJs. Depois disso, você deve seguir os passos abaixo:

  1. Clone ou faça o download deste repositório.
  2. Extraia o conteúdo se o download for um arquivo zip. Verifique se os arquivos estão com read-write.
  3. Execute o comando abaixo no prompt de comando.
node ./src/server.js
  1. A aplicação deverá estar disponivel em seu navegador no endereço: http://localhost:8178/api-docs/

swagger

Dependências

npm install express --save
npm install body-parser

Extensões recomendadas para desenvolvimento no VSCODE

  • Live Server from Ritwick Dey
  • Node Debug from Microsoft

Projeto e Conteúdo

Swagger

O Swagger é uma aplicação open source que auxilia os desenvolvedores a definir, criar, documentar e consumir APIs REST; É composto de um arquivo de configuração, que pode ser definido em YAML ou JSON; Nesse projeto, foi utilizado o Swagger UI Express este módulo permite que você documente a API gerados por swagger-ui, com base em um arquivo swagger.json.

fonte: https://swagger.io/resources/webinars/getting-started-with-swagger/

Para instalar o Mongoose utilize o commando abaixo:

npm install swagger-ui-express

Exemplo de implementação:

const express = require('express');
const app = express();
const swaggerUi = require('swagger-ui-express');
const swaggerDocument = require('./swagger.json');

app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));

JWT

O JWT (JSON Web Token) nada mais é que um padrão (RFC-7519) de mercado que define como transmitir e armazenar objetos JSON de forma simples, compacta e segura entre diferentes aplicações, muito utilizado para validar serviços em Web Services pois os dados contidos no token gerado pode ser validado a qualquer momento uma vez que ele é assinado digitalmente.

JSON Web Tokens (JWT) é um padrão stateless porque o servidor autorizador não precisa manter nenhum estado; o próprio token é sulficiente para verificar a autorização de um portador de token.

Os JWTs são assinados usando um algoritmo de assinatura digital (por exemplo, RSA) que não pode ser forjado. Por isso, qualquer pessoa que confie no certificado do assinante pode confiar com segurança que o JWT é autêntico. Não há necessidade de um servidor consultar o servidor emissor de token para confirmar sua autenticidade.

Nesse projeto, foi utilizado o Bcrypt como ferramenta de cryptografia. E o componente jsonwebtoken para gerar os tokens JWT.

fonte: https://jwt.io/introduction/

Para instalar o Mongoose utilize o commando abaixo:

npm install bcryptjs
npm install jsonwebtoken

MongoDB

MongoDB é um software de banco de dados orientado a documentos livre, de código aberto e multiplataforma, escrito na linguagem C++. Classificado como um programa de banco de dados NoSQL, o MongoDB usa documentos semelhantes a JSON com esquemas.

O Mongoose é uma ferramenta de modelagem de objetos MongoDB projetada para funcionar em um ambiente assíncrono. O Mongoose oferece suporte a promessas e retornos de chamada.

Para instalar o Mongoose utilize o commando abaixo:

npm install mongoose

Exemplo de implementação:

// importando a dependencia
const mongoose = require('mongoose');
 
// Conectando na base
mongoose.connect("mongodb://localhost/cadastro", {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  useCreateIndex: true
});

//exemplo de utilização para post em blog.
const Schema = mongoose.Schema;
const ObjectId = Schema.ObjectId;
 
const BlogPost = new Schema({
  author: ObjectId,
  title: String,
  body: String,
  date: Date
});

SMTP

O SMTP ou Simple Mail Transfer Protocol, é uma convenção padrão dedicada ao envio de e-mail. A princípio o protocolo SMTP utilizava por padrão a porta 25 ou 465 (conexão criptografada) para conexão, porém a partir de 2013 os provedores de internet e as operadoras do Brasil passaram a bloquear a porta 25, e começaram a usar a porta 587 para diminuir a quantidade de SPAM. O SMTP é um protocolo que faz apenas o envio de e-mails, isso significa que o usuário não tem permissão para baixar as mensagens do servidor, nesse caso é necessário utilizar um Client de e-mail que suporte os protocolos POP3 ou IMAP como o Outlook, Thunderbird e etc. Para negócios ou empresas pequenas com baixo volume de e-mails, o servidor SMTP gratuito do Google pode ser uma ótima solução e você pode usar o Gmail para enviar o seu e-mail. Eles possuem uma infraestrutura gigante e você pode confiar nos serviços deles para ficar online. Porém, mesmo sendo completamente grátis, tudo tem um limite. De acordo com a documentação do Google, você pode enviar até 100 e-mails a cada período de 24 horas quando envia através do servidor SMTP deles. Ou você também pode pensar nisso como sendo 3 mil e-mails por mês gratuitamente.Dependendo de quantos e-mails você envia ou do tamanho do seu negócio, isto pode ser mais do que suficiente. Se você envia mais de 5 mil e-mails por mês, você vai preferir usar um serviço de e-mail transacional de terceiros ou um serviço premium. Nesse projeto foi utilizado o nodemailer para envio de e-mail e o nodemailer-express-handlebars para o tratamento de templates de e-mail. Os testes foram feitos utilizando o serviço do mailtrap.io.

Para instalar o Mongoose utilize o commando abaixo:

npm install nodemailer
npm install nodemailer-express-handlebars

Exemplo de implementação:

const nodemailer = require('nodemailer');
const path = require('path');
const hbs = require('nodemailer-express-handlebars');

const mailConfig = {host, port, user, pass} = require('../config/mail.json');

const transport = nodemailer.createTransport ({
 host,
 port,
 auth: { user, pass },
});

transport.use('compile', hbs({
    viewEngine: {
      defaultLayout: undefined,
      partialsDir: path.resolve('./src/static/')
    },
    viewPath: path.resolve('./src/static/'),
    extName: '.html',
  }));


module.exports= transport

As configurações da aplicação estão no config/mail.json

{
    "host" : "smtp.mailtrap.io",
    "port":  2525,
    "user":"usuario",
    "pass":"senha"
}

Para enviar e-mail utilize o método

    const contato = mailer.sendMail(
      {
        to: email,
        from: "[email protected]",
        template: "emailContato",
        context: { email , mensagem , assunto },
      },
      (err) => {
        if (err) throw new Error("Erro no mailer:");
      }
    );

O template de e-mail fica na pasta /static/emailContato.html

<p>
    E-mail de contato<br>
    Remetente: {{email}}<br>
    Assunto: {{assunto}} <br>
    Mensagem: {{mensagem}}
</p>

Jest

Teste de unidade é toda a aplicação de teste nas assinaturas de entrada e saída de um sistema. Consiste em validar dados válidos e inválidos via I/O (entrada/saída) sendo aplicado por desenvolvedores ou analistas de teste. Uma unidade é a menor parte testável de um programa de computador. Em programação procedural, uma unidade pode ser uma função individual ou um procedimento. Idealmente, cada teste de unidade é independente dos demais, o que possibilita ao programador testar cada módulo isoladamente. Jest é um framework de teste de JavaScript mantida pelo Facebook com foco na simplicidade. Trabalha com projetos usando: Babel, TypeScript, Node.js, React, Angular, Vue.js e Svelte. O objetivo é funcionar fora da caixa e sem configurações.

Para a instalação deste componente, utilize o comando abaixo para configurar a dependência em ambiente de desenvolvimento e instalar globalmente:

npm install jest -D
npm install -g jest

Para criar o arquivo de confiuração utilize o commando abaixo:

npm jest --init

Exemplo de implementação de teste unitário sobre a soma de dois números:

describe("Matemática", () => {
  it("receber dois números e retorna a soma", () => {
    const x = 2;
    const y = 4;

    const sum = x + y;
    expect(sum).toBe(6);
  });
});

Suporte

Por favor entre em contato conosco via [Email]

expressapp's People

Contributors

fabiodelgadopereira avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

taelloranphia

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.