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

Шрифт
Фон

sistema, então iremos criá-lo dentro de views/exit.ejs:

<section>

<a href='/sair'>Sair</a>

</section>

Agora vamos criar o seu controller chamado de contatos.js, contendo ape-

nas a action index. Ele basicamente vai pegar os dados de um usuário logado atra-

vés da variável req.session.usuario e vai enviá-los para view através da função:

res.render().

module.exports = function(app) {

var ContatoController = {

index: function(req, res) {

var usuario = req.session.usuario

, params = {usuario: usuario};

res.render('contatos/index', params);

}

}

return ContatoController;

};

Para finalizar, criaremos um novo routes, por convenção, utilizamos o mesmo

nome do seu controller e por enquanto, vamos incluir a rota GET com o path:

/contatos.

48

Casa do Código

Capítulo 5. Dominando o Express

module.exports = function(app) {

var contatos = app.controllers.contatos;

app.get('/contatos', contatos.index);

};

Vamos testar novamente? Reinicie o servidor teclando no terminal CTRL+C

(no Windows ou Linux) ou Command+C (no MacOSX), em seguida execute node

app.js, por último acesse em seu browser: http://localhost:3000 . Faça novamente

um login no sistema, dessa vez temos uma nova tela no sistema, a agenda de contatos.

Acabamos de expandir nosso projeto, incluímos a área principal. Aprendemos

como habilitar session para implementar um controle de login e logout. Deixamos

todas as

views enxutas, isolando possíveis trechos de repetição de código html, além

explorarmos novos itens da stack de configuração do servidor Node.

5.3

Criando rotas no padrão REST

A nossa agenda de contatos precisa ter como requisito mínimo um meio de permi-

tir o usuário criar, listar, atualizar e excluir contatos. Esse é o conjunto clássico de funcionalidades, mais conhecido como CRUD (Create, Receive, Update e Delete).

As rotas que utilizaremos para implementar o CRUD da agenda de contatos será

aplicando o padrão de rotas REST. Esse padrão consiste em criar rotas utilizando os

principais métodos do HTTP (GET, POST, PUT e DELETE). Para isso teremos

que habilitar um novo item na stack de configurações no app.js:

app.set('views', __dirname + '/views');

app.set('view engine', 'ejs');

app.use(express.cookieParser('ntalk'));

app.use(express.session());

app.use(express.json());

app.use(express.urlencoded());

app.use(express.methodOverride());

app.use(app.router);

app.use(express.static(__dirname + '/public'));

Incluímos o express.methodOverride() que permite utilizar um mesmo

path entre os métodos do HTTP, fazendo uma sobrescrita de métodos. Também foi

adicionado o middleware app.router, que gerencia as rotas da aplicação, permi-

tindo a implementação de rotas para páginas de erros (muita calma! Isso ainda será

49

5.3. Criando rotas no padrão REST

Casa do Código

explicado neste capítulo.) e rotas para arquivos estáticos, sem conflitar com as rotas da aplicação.

Abra o arquivo routes/contatos.js, nele vamos implementar as futuras

rotas para implementar o CRUD da agenda de contatos:

module.exports = function(app) {

var contatos = app.controllers.contatos;

app.get('/contatos', contatos.index);

app.get('/contato/:id', contatos.show);

app.post('/contato', contatos.create);

app.get('/contato/:id/editar', contatos.edit);

app.put('/contato/:id', contatos.update);

app.del('/contato/:id', contatos.destroy);

};

Com as rotas criadas, precisamos agora implementar as regras de negócio den-

tro do controller contatos.js. Como ainda não utilizaremos um banco de da-

dos, todos os dados serão persistidos na própria sessão do usuário, ou seja, todos os

contatos serão gravados em memória e não em um banco de dados dedicado. Em

controller/contatos.js implemente a seguinte lógica na action index:

module.exports = function(app) {

var ContatoController = {

index: function(req, res) {

var usuario = req.session.usuario

, contatos = usuario.contatos

, params = {usuario: usuario

, contatos: contatos};

res.render('contatos/index', params);

},

// continuação do controller...

}

Já na action create utilizaremos um simples array para persistir os contatos do

usuário usuario.contatos.push(contato); para em seguida redireci-

onar o usuário para rota /contatos:

create: function(req, res) {

var contato = req.body.contato

, usuario = req.session.usuario;

usuario.contatos.push(contato);

50

Casa do Código

Capítulo 5. Dominando o Express

res.redirect('/contatos');

},

// continuação do controller...

Em

show e

edit enviamos via parâmetro no path, o ID do usuário.

Neste caso, passamos apenas o índice do contato referente a sua posição no ar-

ray e em seguida enviamos o contato para a renderização de sua respectiva view

res.render('contatos/show') e res.render('contatos/edit');:

show: function(req, res) {

var id = req.params.id

, contato = req.session.usuario.contatos[id]

, params = {contato: contato, id: id};

res.render('contatos/show', params);

},

edit: function(req, res) {

var id = req.params.id

, usuario = req.session.usuario

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

0
Шрифт
Фон

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