Pereira Caio Ribeiro - Node.js. Aplicacoes web real time com Node.js стр 13.

Шрифт
Фон

tocolo HTTP (GET, POST, PUT e DELETE). Seu primeiro parâmetro é uma string

referente a uma rota da aplicação e o segundo é uma função callback que con-

tém uma requisição e uma resposta.

Exemplo:

app.get('/contatos',

function(request, response));

O

app.set(chave, valor) é uma estrutura de chave e valor man-

tida dentro da variável

app.

Seria o mesmo que criar no javascript o có-

digo:

app["chave"] = "valor";. Um exemplo prático são as configura-

ções de views que foram definidos no código anterior: (app.set('views',

'/views')) e (app.set('view engine', 'ejs')).

A maioria das funções chamadas diretamente pela variável express são her-

dadas de seus submódulos Connect e HTTP.

Detalhes sobre Connect

O Connect (https://github.com/senchalabs/connect) é um mid-

dleware para servidores HTTP. Com ele é possível configurar aspectos

do servidor através do conceito de pilha, ou seja, os primeiros itens in-

seridos são os primeiros a serem executados antes de chegar nas funções

callbacks das rotas. O Express herdou todas as funcionalidades do Con-

nect, por isso é recomendável compreender a ordem referente aos itens

a serem incluídos no stack de configurações. Caso você não respeite a

ordem de inserção de cada elemento, sua aplicação não irá se comportar

bem, gerando erros inesperados ou não realizando tais rotinas que fo-

ram estabelecidas. Para isso, é necessário sempre dar uma olhada na do-

cumentação

(http://www.senchalabs.org/connect) para saber mais sobre

esses itens e também sobre a ordem de cada um. Um detalhe importante

é que na própria documentação esses itens já estão listados na ordem em

que cada um deve ser incluído na stack de sua aplicação.

Em nossa aplicação apenas inserimos dois itens na stack de configurações: o tem-

plate engine EJS (Embedded JavaScript) e o diretório de arquivos estáticos. No decor-

rer deste livro serão incluídos e explicados novos itens no nosso projeto.

Também deixei apenas duas rotas:

/ e

/usuarios, repare em como

foram executados os seus callbacks; eles vieram da variável

var routes =

37

4.5. Organizando os diretórios do projeto

Casa do Código

require('./routes') pelo qual foi chamado um diretório e não um código ja-

vascript.

Por default, a chamada routes.index busca o arquivo index.js que con-

tenha a função: exports.index, esta é uma convenção do Express para incluir a

rota raiz da aplicação. Já o routes.users.index seguiu a regra normal de carre-

gamento do arquivo users.js e sua respectiva função exports.index.

4.5

Organizando os diretórios do projeto

Quando o assunto é organização de códigos, o Express se comporta de forma bem

flexível e liberal. Apesar de utilizar o seu scaffold de geração inicial, temos a total liberdade de modificar sua estrutura de diretórios e arquivos. Tudo vai depender da

complexidade do projeto. Por exemplo, se o projeto for um sistema single-page, você

pode desenvolver todo backend dentro código app.js, ou se o projeto possuir di-

versas rotas, views, models e controllers, o ideal seria montar uma estrutura modular

utilizando o pattern MVC (Model-View-Controller).

Em nosso projeto utilizaremos o padrão MVC, para isso falta criar os seguinte

diretórios: models e controllers, deixando sua estrutura dessa forma:

Figura 4.4: Estrutura de diretórios do ntalk.

Cada model que for utilizado em um controller realizará uma chamada a fun-

ção require('/models/nome-do-model');. Em controllers, ou qualquer ou-

38

Casa do Código

Capítulo 4. Iniciando com o Express

tro código, diversas chamadas a função require serão realizadas e isso vai gerar

uma poluição nos códigos. O ideal é utilizarmos apenas para chamadas de módulos

externos ou utilizar com frequência a função require dentro de app.js. Com

base nesse problema, surgiu um plugin que visa minimizar essas chamadas, ele se

chama express-load, sendo responsável por mapear diretórios para carregar e injetar módulos dentro de uma variável que definirmos na função into. Para entender

melhor o que será feito, adicione-o como dependência no package.json:

"dependencies": {

"express": "3.4.7",

"express-load": "1.1.8",

"ejs": "0.8.5"

}

Faça um update dos módulos para instalar o express-load, executando o

comando: npm install.

Agora faremos um refactoring no app.js para implementarmos este módulo e

utilizarmos sua função load():

var express = require('express')

, load = require('express-load')

, app = express();

// ...stack de configurações do servidor...

load('models')

.then('controllers')

.then('routes')

.into(app);

// ...app.listen(3000)...

É importante colocar em ordem os recursos a serem carregados pela função

load(). Neste caso os models são carregados primeiro, em seguida vêm os con-

trollers, e por último os routes.

Continuando o refactoring, exclua o arquivo routes/user.js que foi ge-

rado pelo Express.

E o código

routes/index.js, vamos renomeá-lo para

routes/home.js. Nele vamos incluir o seguinte código, que será uma adaptação

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке