API-driven framework for building realtime apps, using MVC conventions (based on Express and Socket.io)
npx @tessl/cli install tessl/npm-sails@1.5.0Sails.js is an API-driven framework for building realtime Node.js web applications using MVC conventions. Built on top of Express.js and Socket.io, Sails provides a robust foundation for creating scalable web APIs and full-stack applications with automatic REST API generation, real-time communication, and a flexible hook system.
Package Name: sails
Version: 1.5.15
License: MIT
Homepage: https://sailsjs.com
Node.js Support: >= 0.10.0
NPM Support: >= 1.4.0
Installation:
npm install sails -g// Get the singleton Sails instance
const sails = require('sails');
// Get the Sails constructor for creating new instances
const Sails = require('sails').Sails;
// or
const Sails = require('sails').constructor;
// Create a new app instance
const app = new Sails();import sails from 'sails';
import { Sails } from 'sails';
// Create new instance
const app = new Sails();const sails = require('sails');
// Lift the Sails application
sails.lift({
port: 3000,
environment: 'development'
}, (err) => {
if (err) throw err;
console.log('Sails app lifted successfully!');
});const sails = require('sails');
// Define routes programmatically
sails.get('/hello', (req, res) => {
return res.json({ message: 'Hello, World!' });
});
sails.post('/users', 'UserController.create');
// Lift the application
sails.lift();Sails.js follows a modular architecture built around several key components:
The Sails application lifecycle is managed through core methods that handle startup, shutdown, and configuration:
// Lift (start) the application
sails.lift(configOverride?: Dictionary, done?: Function): Sails
// Lower (stop) the application
sails.lower(options?: {delay?: Number, hardShutdown?: Boolean}, cb?: Function): void
// Load app without starting servers (internal)
sails.load(configOverride?: Dictionary, cb?: Function): voidKey Features:
Sails provides a powerful routing system that supports both programmatic and configuration-based route definitions:
// HTTP method routing
sails.get(path: String, action: String|Function): Sails
sails.post(path: String, action: String|Function): Sails
sails.put(path: String, action: String|Function): Sails
sails.delete(path: String, action: String|Function): Sails
sails.all(path: String, action: String|Function): Sails
// Router instance methods
sails.router.bind(path: String|RegExp, bindTo: String|Object|Function, verb?: String, options?: Dictionary): void
sails.router.flush(routes?: Dictionary): void
sails.router.reset(): voidKey Features:
Sails uses a flexible action system for handling requests, supporting both traditional controller methods and standalone action functions:
// Action management
sails.registerAction(action: Function|Dictionary, identity: String, force?: Boolean): void
sails.getActions(): Dictionary
sails.reloadActions(cb?: Function): void
// Route discovery
sails.getRouteFor(target: String|Dictionary): {url: String, method: String}
sails.getUrlFor(target: String|Dictionary): StringKey Features:
Sails includes 18+ built-in hooks that provide core framework functionality:
// Hook lifecycle (for custom hooks)
Hook.defaults(): Dictionary
Hook.configure(): void
Hook.loadModules(cb: Function): void
Hook.initialize(cb: Function): voidCore Hooks:
Sails provides a unified configuration system that merges settings from multiple sources:
// Configuration access
sails.getRc(namespace?: String): Dictionary
sails.config: DictionaryConfiguration Sources (in order of precedence):
Key Features:
Sails provides a comprehensive set of command-line tools for development and deployment:
# Core commands
sails new [path] # Create new Sails application
sails lift # Start the application
sails generate [type] # Generate code components
sails console # Interactive REPL with app context
# Development commands
sails debug # Start with debugger (Node v5-)
sails inspect # Start with inspector (Node v6+)
sails run [script] # Run custom scripts
# Utility commands
sails test # Run tests
sails www # Compile assets to www folder
sails upgrade # Upgrade Sails application
sails deploy # Deploy applicationSails inherits from EventEmitter and provides a rich event system for lifecycle management:
// Core lifecycle events
sails.on('lifted', callback) // App successfully started
sails.on('lower', callback) // App shutdown initiated
sails.on('ready', callback) // App ready (internal)
// Router events
sails.on('router:before', callback) // Before route binding
sails.on('router:after', callback) // After route binding
sails.on('router:reset', callback) // Router resetKey Features:
Sails provides built-in request simulation for testing and development:
// Virtual request simulation
sails.request(opts: {url: String, method?: String, params?: Dictionary, headers?: Dictionary}, cb?: Function): MockClientResponse
sails.request(address: String, params?: Dictionary, cb?: Function): MockClientResponseUse Cases:
// Asset detection pattern
sails.LOOKS_LIKE_ASSET_RX: RegExp // /^[^?]*\/[^?\/]+\.[^?\/]+(\?.*)?$/
// Utility methods for debugging and serialization
sails.inspect(): String // Custom inspection output for console.log/util.inspect
sails.toString(): String // String representation of Sails app instance
sails.toJSON(): Dictionary // JSON-serializable summary of the app instance
// Development validation methods
sails.isLocalSailsValid(sailsPath: String, appPath: String): Boolean // Check if local Sails installation is valid
sails.isSailsAppSync(appPath: String): Boolean // Check if directory contains a valid Sails appnpm install -g sailssails new my-appcd my-appsails lifthttp://localhost:1337For detailed API documentation, configuration options, and advanced usage patterns, refer to the comprehensive sub-documentation linked above.