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 →
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.
Por que escolher Sails.js para sua próxima aplicação Web ou API?
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.
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.
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.
A tecnologia intercepta requisições WebSocket automaticamente, permitindo implementar notificações em tempo real, chats e dados ao vivo sem configurações complexas.
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.
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.
Economize semanas de trabalho com nossos modelos e dicionários traduzidos e contextualizados
Modelos padronizados com textos e termos traduzidos prontos para incluir em seu projeto:
Modelos de telas de autenticação e layout principal para reconstruir sua interface:
Compilação de código pronto: Helpers atômicos, Hooks globais, Policies de segurança e Scripts:
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.
sails console) para testar funções em tempo realapi/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/.
Entenda o ciclo completo de uma requisição HTTP ou WebSocket desde o navegador até a renderização:
GET /overview) ou evento WebSocket.
config/policies.js (ex: autenticação). Se não autorizado, retorna 401 / 403.
config/routes.js ou Blueprints. Se não existir, retorna 404.
api/controllers/ é acionado para processar a lógica de negócios.
User.findOne(...)) que acessa o banco de dados.
Padronização no uso de funções JavaScript reutilizáveis, previsíveis e de alta manutenibilidade:
Funções reutilizáveis no padrão Machinepack salvas em api/helpers/. Acessíveis globalmente via await sails.helpers.meuHelper(...).
Middlewares de autorização em api/policies/ executados antes das ações para restringir acessos a usuários logados ou verificar tokens JWT.
Módulos em api/hooks/ que estendem o Core do Sails na inicialização do servidor, adicionando rotas ocultas ou eventos globais.
Utilitários em scripts/ para tarefas de linha de comando ou automação de manutenção, acionados via sails run meu-script.
O que acontece nos bastidores quando você executa sails lift:
datastore.js, models.js, custom.js, local.js).api/helpers/*).api/hooks/*).config/bootstrap.js.sessions.js, http.js).api/controllers/*).socket.js).
NODE_ENV=production): Ao executar em produção, as definições contidas em config/env/production.js sobrescrevem automaticamente as configurações padrão.
As Actions são responsáveis por responder às solicitações HTTP/WebSocket. No Sails, elas podem ser estruturadas de duas formas:
inputs com validação nativa.exits (ex: views, redirects, badRequest).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 }; } };
read, create, update no mesmo controller.req e res.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); } };
sails generate action create-usuario → Gera Action 2 POSTsails generate page minha-pagina → Gera Action 2 + View EJS + Vue 2sails generate controller Usuario → Gera Controller Clássicosails generate api produto → Gera Controller + Model RESTful