Portal de Conhecimento em Português

Bem-vindo ao Sails.js Tech Brasil

O Sails.js é o framework MVC mais popular para Node.js, projetado para emular o padrão Ruby on Rails com suporte nativo a requisitos modernos de aplicações empresariais: APIs RESTful, WebSockets em tempo real e arquitetura escalável orientada a serviços.

Sails Logo
Produtividade Máxima

Crie aplicações Node.js práticas e prontas para produção em questão de semanas, não meses.

O Truque da Tecnologia Sails.js

O núcleo do Sails se baseia no Express.js expandido pelo time oficial do Sails para fornecer automação completa na criação de recursos essenciais: autenticação de usuários, cadastro, verificação de e-mail, recuperação de senhas, WebSockets e faturamento com Stripe.

Além disso, incorpora ferramentas de scaffolding, ORM adaptável (Waterline) e console interativo para testes em tempo de execução. Conheça todos os detalhes na Visão Geral →

Mantido por RIZ | iko

Sails.js Tech Brasil© é um repositório comunitário criado e mantido pela RIZ | iko com o objetivo de apoiar desenvolvedores de língua portuguesa na construção de soluções digitais modernas.

Principais Recursos & Diferenciais

Por que escolher Sails.js para sua próxima aplicação Web ou API?

100% JavaScript + HTML5

Mantém o mesmo Mindset tanto no frontend quanto no backend, acelerando a curva de aprendizado e permitindo compartilhamento de lógica de negócio e validações.

Qualquer Banco de Dados

O Waterline ORM em camadas permite conectar com PostgreSQL, MySQL, MongoDB, SQLite, Redis ou qualquer outro banco relacional ou orientado a documentos sem mudar sua lógica.

Frontend Agnóstico

Funciona com Vue 3, React, Angular, Svelte ou páginas tradicionais EJS/Pug. Inclui suporte a Vue2-Parasails nativamente para integração sem atrito entre cliente e servidor.

WebSockets Integrados

A tecnologia intercepta requisições WebSocket automaticamente, permitindo implementar notificações em tempo real, chats e dados ao vivo sem configurações complexas.

Prototipação Rápida

Em minutos, tenha um protótipo com login, cadastro, logout, redefinição de senha, suporte, FAQ, termos legais e conexão com banco de dados pronto para testes.

Geradores de Código (CLI)

Comandos CLI poderosos para gerar Actions, Controllers, Models, Helpers, Scripts, APIs REST e páginas prontas com validação e tipagem automática via Action 2.

Modelos Prontos & Traduzidos em Português

Economize semanas de trabalho com nossos modelos e dicionários traduzidos e contextualizados

Visão Geral do Sails.js

Em termos gerais, Sails.js é um gerador de códigos JavaScript que entrega em poucos minutos um protótipo executável de uma Aplicação WEB backend robusta, segura e escalável, entregando páginas dinâmicas e responsivas.

🎁 O que já vem pronto num Protótipo Sails:
  • ✅ Páginas de Cadastro de Novos Usuários, Login e Logout
  • ✅ Recuperação e alteração segura de senhas via e-mail
  • ✅ Página de FAQ interativa
  • ✅ Páginas de Termos de Serviço e Política de Privacidade
  • ✅ Formulário funcional de solicitação de suporte
  • ✅ Internacionalização (i18n) nativa em múltiplos idiomas
  • ✅ Conexão configurada para banco de dados local ou remoto
🛠️ O que você pode fazer com o Sails:
  • 📦 Projeto 100% código aberto, sem bibliotecas proprietárias presas
  • 💻 Console interativo no terminal (sails console) para testar funções em tempo real
  • ⚙️ Criar controladores, ações, helpers, hooks, scripts e models com um único comando
  • 🛡️ Políticas de segurança integradas contra CSRF, XSS, CORS e injeções
  • 🚀 Escalar horizontalmente com suporte nativo a sessões Redis e WebSockets
Princípio de Convenção sobre Configuração: O Sails organiza seus modelos em api/models/ e seus controladores em api/controllers/, gerando endpoints automaticamente enquanto permite que qualquer parâmetro seja ajustado via arquivos de configuração em config/.

Como Funciona o Fluxo de Requisição no Sails.js?

Entenda o ciclo completo de uma requisição HTTP ou WebSocket desde o navegador até a renderização:

1
Requisição do Navegador: O cliente dispara uma solicitação HTTP (ex: GET /overview) ou evento WebSocket.
2
Validação de Políticas (Policies): O Core confronta com as políticas definidas em config/policies.js (ex: autenticação). Se não autorizado, retorna 401 / 403.
3
Mapeamento de Rotas: O Sails compara o caminho com config/routes.js ou Blueprints. Se não existir, retorna 404.
4
Execução da Action/Controller: O controlador em api/controllers/ é acionado para processar a lógica de negócios.
5
Acesso aos Dados (Waterline): O controlador consulta o Model (ex: User.findOne(...)) que acessa o banco de dados.
6
Resposta ou Renderização: O controlador retorna JSON para APIs ou orquestra a renderização da View (EJS/Pug) vinculando estilos CSS e reatividade.
Sails Architecture Diagram
Diagrama de Arquitetura e Ciclo de Vida de Requisições

Helpers, Hooks, Policies & Scripts

Padronização no uso de funções JavaScript reutilizáveis, previsíveis e de alta manutenibilidade:

⚙️ Helpers

Funções reutilizáveis no padrão Machinepack salvas em api/helpers/. Acessíveis globalmente via await sails.helpers.meuHelper(...).

🛡️ Policies

Middlewares de autorização em api/policies/ executados antes das ações para restringir acessos a usuários logados ou verificar tokens JWT.

🔌 Hooks

Módulos em api/hooks/ que estendem o Core do Sails na inicialização do servidor, adicionando rotas ocultas ou eventos globais.

📜 Scripts

Utilitários em scripts/ para tarefas de linha de comando ou automação de manutenção, acionados via sails run meu-script.

💡 Conheça exemplos prontos de Helpers para JWT, Validação de CNPJ, Envio de SMS e Uploads. Ver Exemplos Funcionais

Ciclo de Inicialização da Aplicação

O que acontece nos bastidores quando você executa sails lift:

  1. Carregamento das configurações (datastore.js, models.js, custom.js, local.js).
  2. Carregamento automático de todos os Helpers (api/helpers/*).
  3. Carregamento e inicialização dos Hooks (api/hooks/*).
  4. Execução do inicializador config/bootstrap.js.
  5. Carregamento dos parâmetros de Sessão e HTTP (sessions.js, http.js).
  6. Inicialização do Servidor HTTP (Express).
  7. Mapeamento das Rotas e Actions (api/controllers/*).
  8. Inicialização do Servidor WebSocket (socket.js).
  9. Ativação dos Listeners para escuta de requisições.
Sails Bootstrap Lifecycle
Diagrama da Sequência de Inicialização do Sails
Ambiente de Produção (NODE_ENV=production): Ao executar em produção, as definições contidas em config/env/production.js sobrescrevem automaticamente as configurações padrão.

Actions & Controllers: Action 2 vs Clássico

As Actions são responsáveis por responder às solicitações HTTP/WebSocket. No Sails, elas podem ser estruturadas de duas formas:

🌟 Action 2 (Recomendado & Moderno)
  • Uma ação por arquivo: Facilita a manutenção, testes e modularização.
  • Validação e Tipagem Automática: Parâmetros definidos em inputs com validação nativa.
  • Saídas Declarativas: Respostas claras e padronizadas em exits (ex: views, redirects, badRequest).
api/controllers/church/search.js
module.exports = {
  friendlyName: 'Church Search',
  inputs: {
    nomeCidade: { type: 'string', required: true },
    page: { type: 'number', required: false },
    size: { type: 'number', required: false }
  },
  exits: {
    success: { responseType: 'view', viewTemplatePath: 'pages/church-search' }
  },
  fn: async function ({nomeCidade, page, size}) {
    let churchs = await Church.find({ cidade: nomeCidade })
      .skip((page||0) * (size||10)).limit(size||10);
    return { churchs };
  }
};
🏛️ Clássico (Multi-Ações por Controller)
  • Múltiplas ações por arquivo: Métodos como read, create, update no mesmo controller.
  • Compatibilidade com Blueprints: Necessário para rotas RESTful implícitas.
  • Manipulação direta de req e res.
api/controllers/ChurchController.js
module.exports = {
  read: async function (req, res) {
    const id = req.params['id'];
    const church = await Church.findOne({ id });
    if (!church) return res.notFound();
    return res.view('pages/church-edit', { instance: church });
  },
  create: async function (req, res) {
    const novo = await Church.create(req.body).fetch();
    return res.json(novo);
  }
};
Comandos Rápidos no CLI:
sails generate action create-usuario → Gera Action 2 POST
sails generate page minha-pagina → Gera Action 2 + View EJS + Vue 2
sails generate controller Usuario → Gera Controller Clássico
sails generate api produto → Gera Controller + Model RESTful
Topo