markdown melhorespráticas - node
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown melhorespráticas - node相关的知识,希望对你有一定的参考价值。
## Fonte
https://github.com/i0natan/nodebestpractices
## 1. Estrutura de Projetos
1. Estruture seu código em componentes
* Responsabilidades únicas e bem definidas
* Separe em pastas ou até mesmo repositórios
2. Separar os objetos em seus layers
* Web
* Logic
* Data Access
3. Separe lib uteis como um pacote npm
* LIBs Cross
* Ex:
* Log
* Message Handler
* Encryption
4. Separate Express 'server' e 'app'
5. Environment
* Seguro
* Separado da aplicação
* Estruturado com hierarquia
## 2. Error Handling
1. Use async-await (ou promisses). Evite callback
2. Procure usar os modelos de erro padronizados.
* Evite criar modelos de erros
* Padronização
3. Distinguir erros operacionais de bugs
* Erros Operacionais são conhecidos e esperados
* Bugs são inesperados e podem levar à reinicialização da aplicação
4. Trate os erros de forma centralizada
* Evita redundância e diferenças de tratamentos
* Facilita manutenção
5. Documente os possíveis erros de API no Swagger
* Ajuda quem for consumir a API futuramente
6. Quando um bug ocorrer, reinicie a aplicação de forma suave (Graceful Restart)
7. Use uma lib madura de log para melhorar a visibilidade
* Ex:
* Log4J
* Winston
* Brunyan
8. Teste os fluxos de erros
* Use frameworks como mocha e chai
9. Descubra erros e falhas com APM's
10. Trate exceptions não tratadas utilizando:
* `process.on('unhandledRejection',`
* `process.on('uncaughtException',`
## 3. Code Style
1. Utilize ESLint
* Ferramentas como [prettier](https://www.npmjs.com/package/prettier) and [beautify](https://www.npmjs.com/package/js-beautify) funcionam em conjunto.
2. Utilize plugins específicos do node
* Ex:
* [eslint-plugin-node](https://www.npmjs.com/package/eslint-plugin-node)
* [eslint-plugin-mocha](https://www.npmjs.com/package/eslint-plugin-mocha)
* [eslint-plugin-node-security](https://www.npmjs.com/package/eslint-plugin-security)
3. Sempre abra "{" na mesma linha da declaração
* Ex: `function someFunction() {`
* Evita problemas como [este](https://stackoverflow.com/questions/3641519/why-does-a-results-vary-based-on-curly-brace-placement)
4. Use ponto-e-vírgula
5. Nomeie suas funções, inclusive callbacks e closures
6. Utilize convenções ao nomear
* **_lowerCamelCase_**
* Variáveis
* Constantes
* Funções
* **_UpperCamelCase_**
* Classes
7. Uso de const e let
* Prefira usar const em vez de let
* Torna o seu código mais legível e previsível
* Evita o reuso da variável
* Quando houver necessidade de reusar a variável, como em um for, use let.
* **Quando usar var?**
* Nunca.
8. Require vem sempre antes e fora de todas as funções. No começo do arquivo.
9. Faça o 'require' sempre sobre pastas, e não arquivos.
* Inclua um index.js na pasta para expor os módulos internos
* Este arquivo servirá como uma interface
10. Use o operador `===`
11. Use async-await
12. Use arrow functions
## 4. Teste e QA
1. Escreva ao menos testes de API
2. Detecte problemas de código com um linter
* Rode antes dos testes
* Adicione como hook pré-commit
3. Escolha uma ferramenta de CI com boas possibilidades
4. Inspecione constantemente suas vulnerabilidades
5. Tag nos testes
6. Code Coverage
* Auxilia a identificar um decréscimo na cobertura de código
* identificar áreas menos testadas
* Definir um valor mínimo de cobertura de testes
7. Inspecione constantemente os pacotes desatualizados
8. Usar docker-compose para testes e2e
* Testes em ambientes semelhantes a PRD
* Sobe a stack inteira, testa e mata em seguida
9. Refatore regularmente com ferramentas analíticas
* Code Smell
* Detecta duplicações (Multiple Files)
* Análises Avançadas (Complexidades)
* Acompanha histórico e progresso das issues
* **Ferramentas**
* [Sonarqube](https://www.sonarqube.org/) (https://github.com/SonarSource/sonarqube))
* [Code Climate](https://codeclimate.com/)
## 5. Produção(!)
1. Monitoramento
* "Encontrar o erro antes que o cliente o faça"
* Alertas:
* Email
* Slack
* Saúde do ambiente
* CPU
* RAM
* Tempo de resposta
* #Erros
* **Ferramentas**
* StackDriver
2. Aumente a transparência usando logs inteligentes/úteis
* Log
* Agregattion
* Visualization
3. Delegue questões de infra para outras ferramentas
* Node não é performático para questões como SSL, gzip, etc
* Single-Thread presa
4. Fixe as dependências entre os ambientes
* Yarn faz esse trabalho
5. Proteja e reinicie seu processo após falha
* Pode ser interessante utilizar uma ferramenta gerenciadora de clusters
6. Utilize todos os core's de CPU
* App's peq/médias
* PM2 ou Node Cluster
* App's Grandes
* K8s, ECS ou systemd para Linux
7. Crie um endpoint de "manutenção"
* Retorna informações da saúde do sistema
* Ferramenta:
* Heapdump
8. Descubra erros e falhas com APM's
9. Faça do seu código production-ready
* Tips: https://github.com/i0natan/nodebestpractices/blob/master/sections/production/productioncode.md
10. Monitore e proteja a RAM
11. Deixe os recursos de front-end fora do Node
12. Seja Stateless. Mate suas aplicações todos os dias.
13. Use ferramentas que verifiquem vulnerabilidades automaticamente.
* npm audit
* snyk
14. Atribua TransactionId para cada registro de log
15. defina a variável NODE_ENV=PRODUCTION
16. Deploys automatizados, atômicos e zero downtime
17. Use LTS Node version
18. Não roteie logs de dentro da APP."
## 6. Segurança
1. Abrace as regras de segurança do linter
* Ex Ferramenta: [eslint-plugin-security](https://github.com/nodesecurity/eslint-plugin-security)
* Usar Linters não apenas para evitar espaços em branco, mas também para evitar potenciais vulnerabilidades.
2. Limite request concorrentes usando serviços externos
* cloud load balancers
* cloud firewalls
* nginx,
3. Extraia senha de serviços externos de config, ou encripte as senhas contidas no projeto.
* Vault products
* Kubernetes/Docker Secrets
* Environment variables
4. Previna-se de ataques de query injection
* Ferramentas como mongoose, sequelize, Knex possuem proteção nativa.
5. Coleção de Boas Práticas de segurança
* https://github.com/i0natan/nodebestpractices/blob/master/sections/security/commonsecuritybestpractices.md
6.
以上是关于markdown melhorespráticas - node的主要内容,如果未能解决你的问题,请参考以下文章
markdown Formulárioutilizando模型
markdown Pasarparámetrosdesde纸质按钮