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 do tipo backend robusta, segura e escalável. Diz-se backend porque todo o processamento ocorre do lado do servidor e depois disso é retornado ao navegador páginas HTML5 + CSS + JavaScript dinâmicas ao Cliente Web.
No entanto, é possível separar o acesso aos dados e a renderização de telas para os usuários em dois "pacotes" distintos: o apelidado de frontend - contendo as páginas html+JavaScript construídas na estação do cliente de forma dinâmica; e o backend - contendo as funções de acesso a base de dados e autenticação, no lado do servidor.
O Angular é um framework para desenvolvimento de frontend, mantido pela equipe do Google e com rígidos padrões de projeto. Implementado em TypeScript. Uma vez concluída a implementação de suas funcionalidades, são gerados (build) arquivos JavaScript, HTML e CSS que podem ser distribuídos para execução em navegadores (ie, Edge, Safari, etc.)
Este passo-a-passo demonstra como utilizar o Angular como solução de frontend em sincronia com as funcionalidades do Sails.js no backend.
Se esta é sua primeira vez aqui, recomendamos a leitura dos conteúdos abaixo antes de continuar:
npm i sails -gsails new primeiro-prototipo
Choose a template for your new Sails app:
1. Web App · Extensible project with auth, login, & password recovery
2. Empty · An empty Sails app, yours to configure
(type "?" for help, or <CTRL+C> to cancel)
? 2
cd primeiro-prototiposails lift você verá:
info: Starting app...
info: Initializing project hook... (`api/hooks/custom/`)
info: Initializing `apianalytics` hook... (requests to monitored routes will be logged!)
info: ·• Auto-migrating... (alter)
info: Hold tight, this could take a moment.
info: ✓ Auto-migration complete.
debug: Running v0 bootstrap script... (looks like this is the first time the bootstrap has run on this computer)
info:
info: .-..-.
info:
info: Sails <| .-..-.
info: v1.5.8 |\
info: /|.\
info: / || \
info: ,' |' \
info: .-'.-==|/_--'
info: `--'-------'
info: __---___--___---___--___---___--___
info: ____---___--___---___--___---___--___-__
info:
info: Server lifted in `C:\Users\rogeriorfs\git\passo-a-passo`
info: To shut down Sails, press <CTRL> + C at any time.
info: Read more at https://sailsjs.com/support.
debug: -------------------------------------------------------
debug: :: Mon Jul 17 2023 08:15:43 GMT-0300 (Horário Padrão de Brasília)
debug: Environment : development
debug: Port : 1337
debug: Local : http://localhost:1337
debug: -------------------------------------------------------
http://localhost:1337.
O navegador deve apresentar algo do tipo:
npm init @angular myApp
Need to install the following packages:
@angular/create@16.2.4
Ok to proceed? (y) y
? Would you like to add Angular routing? Yes
? Which stylesheet format would you like to use? CSS
angular.json
e altere a informação de:
"projects": {
"myApp": {
...
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/my-app", para:
"projects": {
"myApp": {
...
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "../assets",
de modo que o arquivo se pareça com:
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"cli": {
"packageManager": "npm"
},
"newProjectRoot": "projects",
"projects": {
"myApp": {
"projectType": "application",
"schematics": {},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "../assets",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": [
"zone.js"
],
"tsConfig": "tsconfig.app.json",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": []
},
"configurations": {
"production": {
"budgets": [
{
"type": "initial",
"maximumWarning": "500kb",
"maximumError": "1mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "2kb",
"maximumError": "4kb"
}
],
"outputHashing": "all"
},
"development": {
"buildOptimizer": false,
"optimization": false,
"vendorChunk": true,
"extractLicenses": false,
"sourceMap": true,
"namedChunks": true
}
},
"defaultConfiguration": "production"
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"configurations": {
"production": {
"browserTarget": "myApp:build:production"
},
"development": {
"browserTarget": "myApp:build:development"
}
},
"defaultConfiguration": "development"
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "myApp:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"polyfills": [
"zone.js",
"zone.js/testing"
],
"tsConfig": "tsconfig.spec.json",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": []
}
}
}
}
}
}
npm install e, em seguida, ng build.
Você deve visualizar no console algo do tipo:
√ Browser application bundle generation complete.
√ Copying assets complete.
√ Index html generation complete.
Initial Chunk Files | Names | Raw Size | Estimated Transfer Size
main.4c8e9b0ac4639c46.js | main | 207.70 kB | 56.47 kB
polyfills.d9dc496a0e0d7b3e.js | polyfills | 33.02 kB | 10.63 kB
runtime.b74d0b05de58f3da.js | runtime | 888 bytes | 513 bytes
styles.ef46db3751d8e999.css | styles | 0 bytes | -
| Initial Total | 241.58 kB | 67.60 kB
Build at: 2023-09-28T12:40:56.877Z - Hash: c6e031ca4939cd2a - Time: 15621ms
views/pages/homepage.ejs e substitua todo o seu conteúdo por:
<script>
window.location.href='/index.html'
</script>
sails lift (a partir da raiz do seu novo protótipo e não da pasta criada pelo Angular)
e navegue para http://localhost:1337
ng serve. Depois abra seu Navegador e navegue para http://localhost:4200/[nome-do-diretorio-angular]/src/app/app.component.html e faça a alteração do texto Welcome (provavelmente linha 312) para Sails com Angular
[nome-do-diretorio-angular]/ng build para atualizar o conteúdo estático em assets/.
Somente depois disso, reinicie sua aplicação Sails com o comando [diretorio-raiz]/sails lift