[SYMBOL][A][B][C][D][E][F][G][H][I][J][K][L][M][N][O][P][Q][R][S][T][U][V][W][X][Y]
200 status code, 2nd
400 Bad Request status code
403 Forbidden status code, 2nd
404 Not Found status code, 2nd
500 Server Error status code
access control
policies and, 2nd
best practices
preventing confusion for signed-in users
preventing inconsistent user experience
preventing users from changing data of other users
restricting access to account management endpoints
restricting access to administrative actions
rules, adjusting.
See blueprint routes.
account management endpoints, restricting access to
account-related pages, securing
action blueprints
action routes
actions, 2nd
administrative
listing all users in database
restricting access to
updating administrative flags
creating
custom, to serve homepage
editing user profiles
retrieving record for particular user
retrieving user’s Gravatar URL
saving updated information
updating user password
identifying requirements for
names, refactoring repetitive
providing data for user profile page
permanently deleting users
retrieving information
soft-deleting user records
refactoring, to use associations
restoring user accounts
routes and
automatic routing
res.json()
signup form
adding dummy user in bootstrap.js
creating user records
encrypting passwords
naming custom actions
preventing duplicate accounts
profile images with Gravatar
validating email addresses
adapters
databases and
overview
.add() method
admin interface
admin attribute
banned attribute
admin property, 2nd, 3rd, 4th
administration page, securing
administrative actions
listing all users in database
restricting access to
updating administrative flags
administrative flags, updating
AJAX
creating records with
deleting record with
finding records with
locating particular record with
updating record with
Angular, 2nd
forms
listing data with
API (application programming interface)
backend
design of
overview
routes
validations in
chat, creating
designing, frontend-first
finalizing
frontend
assets, delivering
backend design starting with code from
validations in.
See blueprint APIs.
API Reference, Brushfire
applications
developing, selecting operating system
Sails, creating
arrays, embedded
assert() method, 2nd
asset pipeline
asset routes
assets, static
Angular
frontend-first API design
jQuery
overview
pipeline
scripts, managing
static routing
stylesheets, managing
associations, 2nd
.add()
configuring between models
embedded data and
relationships between data
services
.populate()
refactoring actions to use
refactoring bootstrap.js to use
.remove()
.save()
two-way, creating with via.
See JSON, embedded.
async library, 2nd
async module
async package
async.each() method, 2nd
asynchronous functions, 2nd
asynchronous programming
attributes, databases and
defining
validation of
authentication
defined
of users after signup
sessions and
autogenerated REST APIs
automatic routing, for custom actions
auto-migration settings, configuring
auto-migrations, handling existing data with, 2nd
averages, calculating
backend API, 2nd, 3rd, 4th
design of
overview
routes
validations in
backend application flow, implementing
business rules for signup page
personalizing user profile page
personalizing video list
securing administration page
securing edit-profile form
securing other account-related pages
backend code
converting requirements into development tasks
creating multiple records
machinepacks
model methods
running on sails lift
before() method, 2nd
best practices
access control
policies
blueprint action
blueprint APIs
filtering data returned by blueprints
prototyping with
auto-migrations
designing API around user interface
generating API in Sails
obtaining example materials
RESTful blueprint routes
creating records with AJAX
deleting record with AJAX
finding records with AJAX
locating particular record with AJAX
updating record with AJAX
shortcut blueprint routes
accessing database from URL bar
creating records with
upgrading to WebSockets
replacing $http.get() with io.socket.get()
replacing $http.post() with io.socket.post()
using RPS methods
add action
create action
destroy action
find action
findOne action
populate action
remove action
update action
blueprint routes, 2nd, 3rd
designing custom backend endpoints
disabling
explicit routes
blueprints, prototyping with
bootstrap function, 2nd, 3rd, 4th, 5th
bootstrap.js, 2nd, 3rd
adding dummy user in
bootstrap.css.map
bootstrap.min.css, 2nd
refactoring, to use associations
Brushfire
deploying
configuring sessions and sockets for production
Heroku, 2nd
Heroku and
overview
remote PostgreSQL database, using
runtime environments
scaling to multiple dynos
models, after pivot
build-time process, vs. runtime process
built-in controller actions
built-in response pages
callback hell
cb() method
CCS (cloud computing service)
CDN (content delivery network)
overview, 2nd
static-assets on
chat
adding event listener to frontend
adding to existing page
APIs, creating
notifications, sending
subscribing sockets to rooms
chat model, 2nd
click events, jQuery
client-side router
client-side templates, EJS views and
code refactoring
code, duplicative
collection association
collections, removing records from
command-line terminal
locating
overview
communication, with WebSockets
stoppedTyping notifications, sending
typing notifications, sending
community support, for Sails.js
.config function
config/bootstrap.js file, 2nd
configuring
associations between models
databases
connection property, 2nd, 3rd
connection setting
consolidating duplicative code
container
containerization
content delivery network.
See CDN.
CORS (cross-origin resource sharing)
.count() method, 2nd, 3rd, 4th
create action, 2nd, 3rd
create blueprint action, 2nd
.create() method, 2nd, 3rd
created attribute
createdAt attribute, 2nd, 3rd
createTutorial action, 2nd, 3rd, 4th
credentials, storing in environment variables
CRUD (create, read, update, and delete), 2nd
CSRF (cross-site request forgery), 2nd, 3rd
csrf property
CSRF tokens
adding for WebSocket requests
disabling
establishing
inserting via hidden input field
protection
sending
csrf variable
cursors module
Cursor.subscribe() method
Cursor.watch() method
custom actions
administrative actions
listing all users in database
updating administrative flags
editing user profiles
retrieving record for particular user
retrieving user’s Gravatar URL
saving updated information
updating user password
identifying requirements for
naming
providing data for user profile page
permanently deleting users
retrieving information
soft-deleting user records
restoring user accounts
routes and
automatic routing
res.json()
signup form
adding dummy user in bootstrap.js
creating actions
creating user records
encrypting passwords
naming custom actions
preventing duplicate accounts
profile images with Gravatar
req.param()
response methods
validating email addresses
to serve homepage
custom backend code
converting requirements into development tasks
creating multiple records
machinepacks
callbacks
finding package to work with YouTube API
installing
machine exits
machine inputs
machinepack-youtube
marshaling data
setting custom configuration in local.js
using
using custom configuration in code
model methods
running on sails lift
custom code, accessing environment variables in
custom routing, error pages and
customizing
built-in response pages
views, based on edit permissions
DaaS (database as a service)
data
associations and, 2nd
.add(), .remove(), and .save()
configuring between models
.populate()
refactoring actions to use
refactoring bootstrap.js to use
relationships between data
services
via to create two-way
listing
with Angular
with jQuery
managing
admin interface
example materials for this chapter
frontend-first approach to data modeling
recovering after soft delete
signup page
user profile page
populating
updating records with
data auto-migrations
databases
accessing from URL bar
adapters and
attributes
defining
validation of
autoincremented
auto-migration settings, configuring
auto-migrations, handling existing data with, 2nd
configuring
filtering data returned by blueprints
handling existing data with Sails auto-migrations
models and, 2nd
overview
remote, configuring connection to
DATABASE_URL variable, 2nd
datastore, setting default for production
default homepage
overview
replacing
DELETE method, 2nd
deleted attribute, 2nd, 3rd, 4th
deleting
records, with AJAX
tutorials
denial of service attacks.
See DoS.
deployment, Brushfire
configuring sessions and sockets for production
Heroku and, 2nd, 3rd
overview
remote PostgreSQL database, using
runtime environments
scaling to multiple dynos
describe() method
description parameter, 2nd
destroy blueprint action
.destroy() method, 2nd
developing web applications
HTTP methods
overview
performing actions
requests
responses
routing
dictionaries
documentation, Sails.js
DoS (denial of service) attacks
dummy user, adding in bootstrap.js
duplicate accounts, preventing
dynos, scaling to multiple
edit permissions, customizing views based on
edit-profile page
retrieving record for particular user
retrieving user’s Gravatar URL
saving updated profile information
securing
updating user password
editTutorial action, 2nd
EJS (Embedded JavaScript)
client-side templates
refactoring
template tags
views
email
addresses, validating
delivering, configuring Mailgun for
on signup page
sending
email attribute, 2nd, 3rd, 4th
email parameter
Emailaddresses.validate() method
embedded arrays, managing video sort order with
embedded data
associations and, 2nd
.add(), .remove(), and .save()
configuring between models
.populate()
refactoring actions to use
refactoring bootstrap.js to use
relationships between data
services
via to create two-way
populating
updating records with.
See JSON, embedded.
embedded relationships, setting up
embedding values
encryptedPassword attribute, 2nd
encryptPassword() method
endpoints
account management, restricting access to
backend, designing custom
follow
logout, creating
testing
unfollow
entry point
environment variables
accessing in custom code
configuring connection to remote database
storing credentials in
error exit
error pages, custom routing and
customizing built-in response pages
impact of
escape characters
event handler, 2nd
event listeners
chat, adding to frontend
overview
event names, and RPS methods
events
exec() method, 2nd
.execSync() method
execution context
favicon.ico file
features, adding new
filtering data returned by blueprints
find action, 2nd, 3rd
find blueprint action, 2nd, 3rd
find criteria, 2nd
.find() method, 2nd
finding records, with AJAX
findOne() method, 2nd, 3rd
firstApp package.json file
fixtures, refactoring tests using
folders, to organize views
followers
displaying on user’s profile
support for
followers attribute
following attribute, 2nd
forms
adding dummy user in bootstrap.js
Angular
creating actions
creating user records
encrypting passwords
jQuery
naming custom actions
preventing duplicate accounts
profile images with Gravatar
req.param()
response methods
validating email addresses
video, creating
frontend API
adding chat event listener to
API design
assets, delivering
backend design starting with code from
validation in
frontend-first approach, 2nd, 3rd
–g flag
generate command
generateRecoveryEmail action
GET method, 2nd
Get profile endpoint
GET request
$.get() syntax
getSession action
Git, installing
GitHub, repositories
cloning
overview
.gitignore file
Gravatar
profile images with
URL, retrieving user’s
gravatarURL attribute, 2nd, 3rd, 4th
gravatarURL parameter
Grunt
for production
overview
habitat
hard limit
helper functions, refactoring tests using
Heroku
deploying to, 2nd
tool belt, installing
homepage
custom actions to serve
default
overview
replacing
horizontal scaling
HTML escaping
HTTP (Hypertext Transfer Protocol)
HTTP methods
$http service
$http.get():replacing with io.socket.get()
$http.post():replacing with io.socket.post()
hybrid web applications, 2nd
id attribute
id parameter, 2nd
id property
IDE (integrated development environment)
IIFE (immediately invoked function expression)
img tag
impact of, variables in routes
IN query
index.html, reasons for using
in-memory datastore, 2nd
input values
inputs
installing
machinepacks
Node.js
Sails.js
io.socket.get() method, 2nd, 3rd
io.socket.on() method, 2nd
io.socket.post() method
io.socket.request() method
IoT (Internet of Things), 2nd
isAdmin policy, 2nd
_.isDefined() method
isLoggedIn policy, 2nd, 3rd
isLoggedOut policy, 2nd
isLoggedOut.js file
_.isString() method, 2nd
it() method, 2nd
JavaScript, client-side
jQuery
forms
listing data with
JSON, embedded
creating records with
populating embedded data
setting up embedded relationships
updating records with embedded data
.json() method
jwres, 2nd
layout property
layout template
layout view
layout.ejs
LESS support, built-in
limit option
<link> tags, automatically injecting
linkedInEmail attribute
listing data
with Angular
with jQuery
localDisk.db file
localDiskDb property
localhost
local.js, setting custom configuration in
locals dictionary
hardcoding in routes
overview, 2nd
locating records, with AJAX
logged-in status, saving
login process
authenticating user after signup
backend for login form
configuring session store
creating /login route
creating logout endpoint
login forms
Sails sessions
saving user’s logged-in status
stateless, defined
updating session when user is deleted or restored
ls command
Machine Specification, 2nd
machinepacks
callbacks
finding package to work with YouTube API
installing
machine exits
machine inputs
machinepack-youtube
marshaling data
setting custom configuration in local.js
using
using custom configuration in code
machinepack-youtube package
Mailgun, configuring for email delivery
man-in-the-middle.
See MITM.
market-based pivot
MathService, 2nd
me dictionary, 2nd
me property
me.id property
me.isMe property
message attribute
.message() method
messages
methods, sails.sockets
middleware
migrate parameter
migrate property
migrate setting
MITM (man-in-the-middle), 2nd
Mocha
model association
model attributes
model methods, 2nd, 3rd
.count() model method
.create() model method
.destroy() model method
.find() model method
overview, 2nd
testing
.update() model method
model settings
models
auto-migration settings, configuring
auto-migrations, handling existing data with, 2nd
Brushfire, after pivot
configuration
alter, 2nd
drop
configuring associations between
creating new model
creating records
running generator
databases and
managing user data
admin interface
example materials for this chapter
frontend-first approach to data modeling
recovering data after soft delete
signup page
user profile page
overview, 2nd
relationships between.
See also model methods.
modifiedAt attribute
modules
from npm
in Node.js
MongoDB
myPostgresqlServer connection, 2nd, 3rd, 4th, 5th
namespacing
new command
node package manager..
See npm.
NODE_ENV variable
Node.js
installing
localhost
modules
organizing code in
Sails applications, creating
Sails server
closing
starting
node_modules folder
notifications
chat, sending
delivering using Redis
listening for
stoppedTyping
excluding sender from broadcast
sails.sockets methods
sending
typing
excluding sender from broadcast
sails.sockets methods
sending
npm (node package manager)
install command, 2nd, 3rd, 4th
publish command
test command
nullipotent policies
online resources for this book
Git, installing
GitHub
overview
repos
operating systems, selecting for application development
options dictionary, 2nd, 3rd
options.view property
outlet
OWASP (Open Web Application Security Project)
PaaS (platform as a service)
package manager, Node
package.json file
page content, personalizing for logged-in users
custom actions to serve homepage
PageController
Page controller, 2nd, 3rd, 4th, 5th
page navigation
pages, built-in response
paginating
general
search results
parameter key/value pairs
parameters
parser.href attribute
partials, 2nd
password-recovery flow
overview
sending emails
passwords
encrypting
for signup page
updating
paths, relative
pathToView argument
persistent attack
personalizing
page content for logged-in users
custom actions to serve homepage
PageController
user profile page
video list
web pages
EJS views
explicit routes
exposing data for use in client-side JavaScript
hardcoding locals in routes
partials and layout.ejs
pivots, 2nd
platform as a service.
See PaaS.
.pluck() method
policies
access control and, 2nd
best practices
preventing confusion for signed-in users
preventing inconsistent user experience
preventing users from changing data of other users
restricting access to account management endpoints
restricting access to administrative actions
configuring
creating
defined
populate method, 2nd
populating embedded data
POST method, 2nd, 3rd
PostgreSQL, 2nd
remote
tables in
Postman
process dictionary
productionPostgresqlServer, 2nd
profile action, 2nd, 3rd
prototyping
with blueprint API
auto-migrations
designing API around user interface
generating API in Sails
obtaining example materials
with blueprints
.publishAdd() method, 2nd
.publishCreate() method
.publishDestroy() method
.publishRemove() method, 2nd
.publishUpdate() method
pure APIs, 2nd
purpose action
PUT method
query string, 2nd, 3rd
.query() method
rateTutorial action, 2nd
rating model, 2nd, 3rd, 4th
ratings
adding new
incorporating
videos
adding records to collection association
cascading delete
creating forms
editing details
integrating player
managing sort order using embedded array
removing records from collections
realtime communication, with WebSockets, 2nd
stoppedTyping notifications, sending
typing notifications, sending
records
adding to collection association
creating with AJAX
creating with embedded JSON
creating with shortcut blueprint routes
deleting with AJAX
finding with AJAX
locating with AJAX
removing from collections
updating with AJAX
updating with embedded data
recovering data, after soft delete
recovering passwords
Redis
provisioning remote instance
to deliver notifications
using in development
REDISTOGO_URL variable
.reduce() method
refactoring
actions, to use associations
adjusting access control rules
bootstrap.js, to use associations
client-side templates
custom routing and error pages
EJS views
for requirement changes
obtaining and revising requirements
views, five categories of
navigation
password-recovery flow
overview
sending emails
patterns and best practices
adding new features
using async.each()
using folders to organize views
repetitive action names
views
relationships, embedded
relative paths
remote database, configuring connection to
remote repository, GitHub
.remove() method, 2nd
removeProfile() method, 2nd, 3rd, 4th
REPL (read-eval-print loop), 2nd
repositories, GitHub
cloning
overview
req dictionary, 2nd, 3rd, 4th, 5th, 6th
req.options
req.param()
req.session.userId property, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th
req.wantsJSON method
res.badRequest() method, 2nd
resData argument
request body
request headers
request line
requests
overview
virtual
require() function, 2nd
requirements, obtaining and revising
res dictionary, 2nd, 3rd
res argument, 2nd
res.badRequest() method, 2nd
resData argument
res.forbidden() method
res.json() method, 2nd
res.negotiate() method, 2nd
res.notFound() method, 2nd
res.ok() method
res.send() method
res.serverError() method
res.view() function
resourceful pubsub methods.
See RPS.
response body, 2nd
response headers
response line
response methods
responses
REST APIs, autogenerated
RESTful blueprint routes
creating records with AJAX
deleting record with AJAX
finding records with AJAX
locating particular record with AJAX
updating record with AJAX
RESTful blueprints
RESTful routes
restoreProfile action, 2nd, 3rd
Reveal Config Vars option
RFC (Request For Comments) page
route address, 2nd
route dictionary
route target
routes
/login, creating
automatic routing, for custom actions
blueprint
designing custom backend endpoints
disabling
custom actions and
automatic routing
res.json()
explicit
defined
overview
hardcoding locals in
in backend API
routing
client-side vs. server-side
custom
static
default homepage
overview
RPS (resourceful pubsub) methods
and event names
blueprint APIs using
add action
create action
destroy action
find action
findOne action
populate action
remove action
update action
.publishUpdate()
.subscribe()
RTTC exemplar notation
runtime environment
configuring auto-migration settings
creating tables in PostgreSQL
deploying to Heroku
setting default datastore for production
setting up Grunt for production
runtime, process
safe mode
sails generate command, 2nd
sails lift command, 2nd, 3rd, 4th, 5th
sails new command, 2nd
sails.config dictionary
sails-generate-static module
sails.io.js file
Sails.js
applications, creating in Node.js
benefits of
community support
documentation
installing
overview
server
closing
starting
sails-linker task
sails-memory adapter
sails_model_create_cursor
same-origin policy
--save parameter
.save() method
scaling to multiple dynos
schemaless database
Schwartz, Barry
$scope dictionary, 2nd
$scope.apply() method
$scope.deleteProfile() function
$scope.me property, 2nd
<script> tags
automatically injecting
overview
scripts
automatically injecting <link> tags
automatically injecting <script> tags
managing
scripts dictionary
search, 2nd
searchCriteria
searchTutorials action
.searchVideos() method
security policies
security realms
security, environment variables
accessing in custom code
configuring connection to remote database
storing credentials in
sender attribute
SEO (search engine optimization), 2nd
server-rendered views
defined
page navigation
personalizing web pages
EJS views
explicit routes
exposing data for use in client-side JavaScript
hardcoding locals in routes
layout.ejs
partials
transitioning from SPA
servers
closing
starting
services
associations for tutorials-detail page
consolidating duplicative code
session cookie
session store, 2nd
sessions
authentication
configuring for production
configuring Mailgun for email delivery
configuring remote session store
provisioning remote Redis To Go instance
using Redis in development
using Redis to deliver notifications
overview
updating when deleted or restored.
See also session store.
shadow routes, 2nd
shortcut blueprint routes
accessing database from URL bar
creating records with
shortcut blueprints, 2nd
shortcut routes
showHomePage action, 2nd, 3rd
showRestorePage, 2nd
showSignupPage action, 2nd, 3rd
showVideosPage action, 2nd
sign-in process
signup action, 2nd, 3rd, 4th, 5th
signup form
adding dummy user in bootstrap.js
creating actions
creating user records
encrypting passwords
naming custom actions
preventing duplicate accounts
profile images with Gravatar
req.param()
response methods
validating email addresses
signup page
email address on
implementing business rules for
password for
username on
signup, authenticating users after
skip query option
skipAssets property
slug, 2nd
socket connections, establishing
Socket.io
sockets
configuring for production
configuring Mailgun for email delivery
provisioning remote Redis To Go instance
using Redis in development
using Redis to deliver notifications
subscribing to rooms
soft delete, after recovering data
SPA (single-page application)
overview, 2nd, 3rd, 4th, 5th
transitioning from
src parameter, 2nd, 3rd
standardization
stateless, defined
static assets
Angular
forms
listing data with
frontend-first API design
jQuery
forms
listing data with
overview
pipeline
CDN, hosting on
Grunt
images, adding
index.html
overview
relative paths
.tmp/ folder
scripts, managing
automatically injecting <link> tags
automatically injecting <script> tags
static routing
default homepage
overview
stylesheets, managing
static routing
default homepage
overview
static-asset pipeline
status code
streams
STYLES tags
stylesheets
LESS support
managing
Sublime Text
.subscribe() method
success exit
SuperTest
tables, in PostgreSQL
TDD (test-driven development)
template engines
template tags
templates, client-side
terminal window tab, opening
terminal, command-line
Terms of Service.
See ToS.
testing, 2nd
assert() method, 2nd
endpoints
environment, configuring
from command line
model methods
overview
refactoring using fixtures and helper functions
test suite, installing dependencies for
using before() and after()
validations
text editors, versus IDEs
textual reason phrase
the-ultimate-question module, 2nd
TLS (transport layer security), 2nd
.tmp folder
toJSON method
tokens
tools
command-line terminal
essential
text editor vs. IDE
ToS (Terms of Service), 2nd
transformation
try/catch
tutorialDetail action, 2nd, 3rd, 4th, 5th, 6th
tutorials
deleting
overview
two-way reference, 2nd, 3rd
typeof operator
typing action, 2nd
unary operator
uncaught exceptions, handling
Unix shell
.unsubscribe() method
.unwatch() method
update blueprint action
update() method, 2nd, 3rd
updatedAt attribute, 2nd
updating records
with AJAX
with embedded data
URL bar, accessing databases from
URL query string
user controller, 2nd
user data, managing
admin interface
example materials for this chapter
frontend-first approach to data modeling
recovering data after soft delete
signup page
user profile page
user experience, preventing inconsistent
user profile page
displaying followers on
personalizing
providing data for
permanently deleting users
retrieving user profile information
soft-deleting user records
user resource
user-agents
User.create() method, 2nd
userCreated function
User.destroy() method
User.find() method
User.findOne() method, 2nd, 3rd, 4th, 5th, 6th
userId property, 2nd, 3rd, 4th, 5th, 6th, 7th
user-initiated password resets
username attribute, 2nd, 3rd, 4th, 5th
:username variable
users
accounts, restoring
authenticating after signup
Gravatar URL, retrieving
listing all in a database
password, updating
permanently deleting
personalizing page content for
custom actions to serve homepage
PageController
preventing from changing data of other users
profile information
retrieving
saving updated
records
creating
retrieving
soft-deleting
saving logged-in status
signed-in, preventing confusion for
updating session when deleted or restored
User.update() method, 2nd, 3rd
validations, testing
verb phrase
verb property
vertical scaling, 2nd
via parameter, creating two-way associations with
via property
videos
adding records to collection association
cascading delete
creating forms
editing details
integrating player
personalizing list of
removing records from collections
sort order, managing using embedded array
view engines
views, 2nd
customizing based on edit permissions
defined
five categories of
folders to organize
page navigation
personalizing web pages
EJS views
explicit routes
exposing data for use in client-side JavaScript
hardcoding locals in routes
partials
refactoring
transitioning from SPA
virtual requests
.watch() method
Waterline
web applications, development of
HTTP methods
overview
performing actions
requests
responses
routing
web pages
accessing
personalizing
EJS views
explicit routes
exposing data for use in client-side JavaScript
hardcoding locals in routes
partials and layout.ejs
WebSocketId property
WebSockets
overview, 2nd
realtime communication with
sails.sockets.blast method
sails.sockets.broadcast() method, 2nd, 3rd, 4th
sails.sockets.getId method
sails.sockets.join() method, 2nd
sails.sockets.leave method
sails.sockets.leaveAll method
socket connections, establishing
upgrading to
replacing $http.get() with io.socket.get()
replacing $http.post() with io.socket.post()
virtual requests
with realtime
stoppedTyping notifications, sending
typing notifications, sending
window dictionary, 2nd, 3rd, 4th
XSS (cross-site scripting), 2nd