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纸质按钮

markdown Exemplos detestesunitários

markdown Miestándarcss

markdown Miestándarhtml

markdown CLI - Básico