From 0fd6afb0c60c027b652945d7f8cebb5794e7e922 Mon Sep 17 00:00:00 2001 From: Suissa Date: Tue, 22 Jul 2014 01:40:47 -0300 Subject: [PATCH 01/10] Resolve the warnings about the bodyparse and errorhandler --- app.js | 7 ++++--- package.json | 5 ++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app.js b/app.js index f09e09d96..fefe73631 100644 --- a/app.js +++ b/app.js @@ -6,7 +6,7 @@ var express = require('express'), bodyParser = require('body-parser'), methodOverride = require('method-override'), - errorHandler = require('error-handler'), + errorHandler = require('errorhandler'), morgan = require('morgan'), routes = require('./routes'), api = require('./routes/api'), @@ -25,7 +25,8 @@ app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(morgan('dev')); -app.use(bodyParser()); +app.use(bodyParser.urlencoded({extended: true})); +app.use(bodyParser.json()); app.use(methodOverride()); app.use(express.static(path.join(__dirname, 'public'))); @@ -33,7 +34,7 @@ var env = process.env.NODE_ENV || 'development'; // development only if (env === 'development') { - app.use(express.errorHandler()); + app.use(errorHandler()); } // production only diff --git a/package.json b/package.json index 4b627f3e8..d9182a025 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,12 @@ "name": "application-name", "version": "0.0.1", "private": true, + "scripts": { + "start": "node app" + }, "dependencies": { "body-parser": "^1.0.2", - "error-handler": "^0.1.4", + "errorhandler": "*", "express": "~4.1.1", "jade": "~0.31.2", "method-override": "^1.0.0", From 4917cf98c3a2dea70b83fbd5f988862cf445fb0a Mon Sep 17 00:00:00 2001 From: Suissa Date: Tue, 22 Jul 2014 10:33:49 -0300 Subject: [PATCH 02/10] Add errohandler version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d9182a025..0291e23df 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ }, "dependencies": { "body-parser": "^1.0.2", - "errorhandler": "*", + "errorhandler": "^1.1.1", "express": "~4.1.1", "jade": "~0.31.2", "method-override": "^1.0.0", From 002ab386b4e4577874be9786b6dc758c7b2e33e6 Mon Sep 17 00:00:00 2001 From: Suissa Date: Tue, 22 Jul 2014 10:55:32 -0300 Subject: [PATCH 03/10] Add router modules for Express 4 --- app.js | 22 +++++++++++++++------- routes/api.js | 9 +++++++-- routes/index.js | 16 ++++++---------- routes/partials.js | 9 +++++++++ 4 files changed, 37 insertions(+), 19 deletions(-) create mode 100644 routes/partials.js diff --git a/app.js b/app.js index fefe73631..3f53bad59 100644 --- a/app.js +++ b/app.js @@ -8,6 +8,7 @@ var express = require('express'), methodOverride = require('method-override'), errorHandler = require('errorhandler'), morgan = require('morgan'), + partials = require('./routes/partials'), routes = require('./routes'), api = require('./routes/api'), http = require('http'), @@ -15,7 +16,6 @@ var express = require('express'), var app = module.exports = express(); - /** * Configuration */ @@ -47,16 +47,24 @@ if (env === 'production') { * Routes */ -// serve index and view partials -app.get('/', routes.index); -app.get('/partials/:name', routes.partials); +// serve index +app.use('/', routes); + +// server view partials +app.use('/partials', partials); // JSON API -app.get('/api/name', api.name); +// app.use('/api', api); // redirect all others to the index (HTML5 history) -app.get('*', routes.index); - +// app.get('*', function(req, res, next) { +// res.render('index'); +// }); + +/// catch 404 and forward to error handler +// app.use('*', function(req, res, next) { +// res.render('index'); +// }); /** * Start Server diff --git a/routes/api.js b/routes/api.js index edae85045..3efb2e00a 100644 --- a/routes/api.js +++ b/routes/api.js @@ -1,9 +1,14 @@ /* * Serve JSON to our AngularJS client */ +var express = require('express'); +var router = express.Router(); -exports.name = function (req, res) { +/* GET home page. */ +router.get('/name', function(req, res) { res.json({ name: 'Bob' }); -}; \ No newline at end of file +}); + +module.exports = router; diff --git a/routes/index.js b/routes/index.js index 6a8731245..35650c8d6 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,13 +1,9 @@ +var express = require('express'); +var router = express.Router(); -/* - * GET home page. - */ - -exports.index = function(req, res){ +/* GET home page. */ +router.get('/', function(req, res) { res.render('index'); -}; +}); -exports.partials = function (req, res) { - var name = req.params.name; - res.render('partials/' + name); -}; \ No newline at end of file +module.exports = router; diff --git a/routes/partials.js b/routes/partials.js new file mode 100644 index 000000000..3305d4aff --- /dev/null +++ b/routes/partials.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +router.get('/', function(req, res) { + var name = req.params.name; + res.render('partials/' + name); +}); + +module.exports = router; \ No newline at end of file From b22c7f07537ebe4f910a654017532024e4f74c63 Mon Sep 17 00:00:00 2001 From: Suissa Date: Tue, 22 Jul 2014 10:56:31 -0300 Subject: [PATCH 04/10] Add .gitignore to node_modules --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..b8c15056f --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +node_modules/ +node_modules/* \ No newline at end of file From d8105b6480b8b9abd2529a3776b2146d858f09af Mon Sep 17 00:00:00 2001 From: Suissa Date: Tue, 22 Jul 2014 11:06:46 -0300 Subject: [PATCH 05/10] Fixed the middlewares --- app.js | 15 +++++---------- routes/partials.js | 2 +- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/app.js b/app.js index 3f53bad59..efe0678de 100644 --- a/app.js +++ b/app.js @@ -8,8 +8,8 @@ var express = require('express'), methodOverride = require('method-override'), errorHandler = require('errorhandler'), morgan = require('morgan'), - partials = require('./routes/partials'), routes = require('./routes'), + partials = require('./routes/partials'), api = require('./routes/api'), http = require('http'), path = require('path'); @@ -54,17 +54,12 @@ app.use('/', routes); app.use('/partials', partials); // JSON API -// app.use('/api', api); +app.use('/api', api); // redirect all others to the index (HTML5 history) -// app.get('*', function(req, res, next) { -// res.render('index'); -// }); - -/// catch 404 and forward to error handler -// app.use('*', function(req, res, next) { -// res.render('index'); -// }); +app.get('*', function(req, res, next) { + res.render('index'); +}); /** * Start Server diff --git a/routes/partials.js b/routes/partials.js index 3305d4aff..cffa611e1 100644 --- a/routes/partials.js +++ b/routes/partials.js @@ -1,7 +1,7 @@ var express = require('express'); var router = express.Router(); -router.get('/', function(req, res) { +router.get('/:name', function(req, res) { var name = req.params.name; res.render('partials/' + name); }); From c14d25396bb959d1bb05d60d551972749484817c Mon Sep 17 00:00:00 2001 From: Suissa Date: Mon, 8 Sep 2014 20:18:53 -0300 Subject: [PATCH 06/10] Modularizei a porra do app --- app.js | 33 +++++++++++++++++++++++---------- bin/www | 9 +++++++++ package.json | 1 + 3 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 bin/www diff --git a/app.js b/app.js index efe0678de..36e4c08e1 100644 --- a/app.js +++ b/app.js @@ -1,8 +1,3 @@ - -/** - * Module dependencies - */ - var express = require('express'), bodyParser = require('body-parser'), methodOverride = require('method-override'), @@ -61,10 +56,28 @@ app.get('*', function(req, res, next) { res.render('index'); }); -/** - * Start Server - */ +// error handlers + +// development error handler +// will print stacktrace +if (app.get('env') === 'development') { + app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: err + }); + }); +} -http.createServer(app).listen(app.get('port'), function () { - console.log('Express server listening on port ' + app.get('port')); +// production error handler +// no stacktraces leaked to user +app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: {} + }); }); + +module.exports = app; diff --git a/bin/www b/bin/www new file mode 100644 index 000000000..7d0e97cdc --- /dev/null +++ b/bin/www @@ -0,0 +1,9 @@ +#!/usr/bin/env node +var debug = require('debug')('express'); +var app = require('../app'); + +app.set('port', process.env.PORT || 3000); + +var server = app.listen(app.get('port'), function () { + debug('Express server listening on port ' + server.address().port); +}); diff --git a/package.json b/package.json index 0291e23df..463cb2c97 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ }, "dependencies": { "body-parser": "^1.0.2", + "debug": "^2.0.0", "errorhandler": "^1.1.1", "express": "~4.1.1", "jade": "~0.31.2", From b8a2a1fc3a46e43be45b290d0bf836a93e388776 Mon Sep 17 00:00:00 2001 From: Suissa Date: Fri, 26 Sep 2014 18:56:31 -0300 Subject: [PATCH 07/10] =?UTF-8?q?Agora=20s=C3=B3=20precisa=20dar=20npm=20s?= =?UTF-8?q?tart=20e=20ele=20instala=20sozinho?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 463cb2c97..063c861d6 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.0.1", "private": true, "scripts": { + "prestart": "npm install", "start": "node app" }, "dependencies": { From c774aeeed33592c6171da894a9e583040837d000 Mon Sep 17 00:00:00 2001 From: Suissa Date: Fri, 26 Sep 2014 18:58:10 -0300 Subject: [PATCH 08/10] =?UTF-8?q?Corre=C3=A7=C3=A3o=20do=20caminho=20do=20?= =?UTF-8?q?app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 063c861d6..cc41d73a8 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "prestart": "npm install", - "start": "node app" + "start": "node bin/www" }, "dependencies": { "body-parser": "^1.0.2", From c89ba63caddfd05cb902a404e69cba3576f90910 Mon Sep 17 00:00:00 2001 From: Suissa Date: Fri, 31 Jul 2015 21:22:05 -0300 Subject: [PATCH 09/10] Import do modulo de rotas das cervejas --- app.js | 24 ++++--- modules/beers/controller.js | 126 ++++++++++++++++++++++++++++++++++ modules/beers/model.js | 31 +++++++++ modules/beers/routes/api.js | 12 ++++ modules/beers/routes/index.js | 10 +++ package.json | 3 +- 6 files changed, 195 insertions(+), 11 deletions(-) create mode 100644 modules/beers/controller.js create mode 100644 modules/beers/model.js create mode 100644 modules/beers/routes/api.js create mode 100644 modules/beers/routes/index.js diff --git a/app.js b/app.js index 36e4c08e1..ae51ed9a2 100644 --- a/app.js +++ b/app.js @@ -1,13 +1,17 @@ -var express = require('express'), - bodyParser = require('body-parser'), - methodOverride = require('method-override'), - errorHandler = require('errorhandler'), - morgan = require('morgan'), - routes = require('./routes'), - partials = require('./routes/partials'), - api = require('./routes/api'), - http = require('http'), - path = require('path'); +var express = require('express') + , bodyParser = require('body-parser') + , methodOverride = require('method-override') + , errorHandler = require('errorhandler') + , morgan = require('morgan') + , routes = require('./routes') + , partials = require('./routes/partials') + , api = require('./routes/api') + , http = require('http') + , path = require('path') + , modulesAPI = {} + ; + +modulesAPI.beers = require('./modules/beers/routes/api'); var app = module.exports = express(); diff --git a/modules/beers/controller.js b/modules/beers/controller.js new file mode 100644 index 000000000..57684c866 --- /dev/null +++ b/modules/beers/controller.js @@ -0,0 +1,126 @@ +var Model = require('./model') + , msg = '' + , Controller = { + create: function(req, res) { + var dados = req.body + , model = new Model(dados); + model.save(function (err, data) { + if (err){ + console.log('Erro: ', err); + msg = err; + } + else{ + console.log('Sucesso:', data); + msg = data; + } + res.json(msg); + }); + } + , retrieve: function(req, res) { + var query = {}; + Model.find(query, function (err, data) { + if (err){ + console.log('Erro: ', err); + msg = err; + } + else{ + console.log('Sucesso:', data); + msg = data; + } + res.json(msg); + }); + } + , get: function(req, res) { + var query = {_id: req.params.id}; + Model.findOne(query, function (err, data) { + if (err){ + console.log('Erro: ', err); + msg = err; + } + else{ + console.log('Sucesso:', data); + msg = data; + } + res.json(msg); + }); + } + , update: function(req, res) { + var query = {_id: req.params.id} + , mod = req.body; + + Model.update(query, mod, function (err, data) { + if (err){ + console.log('Erro: ', err); + msg = err; + } + else{ + console.log('Sucesso:', data); + msg = data; + } + res.json(msg); + }); + } + , delete: function(req, res) { + var query = {_id: req.params.id}; + + Model.remove(query, function (err, data) { + if (err){ + console.log('Erro: ', err); + msg = err; + } + else{ + console.log('Sucesso:', data); + msg = data; + } + res.json(msg); + }); + } + , renderList: function(req, res) { + var query = {}; + Model.find(query, function (err, data) { + if (err){ + console.log('Erro: ', err); + res.render('error', err); + } + else{ + console.log('Sucesso:', data); + res.render('list', {beers: data}); + } + }); + } + , renderGet: function(req, res) { + var query = {_id: req.params.id}; + Model.findOne(query, function (err, data) { + if (err){ + console.log('Erro: ', err); + res.render('error', err); + } + else{ + console.log('Sucesso:', data); + res.render('get', {beer: data}); + } + }); + } + , renderEdit: function(req, res) { + var query = {_id: req.params.id}; + Model.findOne(query, function (err, data) { + if (err){ + console.log('Erro: ', err); + res.render('error', err); + } + else{ + console.log('Sucesso:', data); + res.render('edit', {beer: data}); + } + }); + } + , renderCreate: function(req, res) { + res.render('create'); + } + } + ; + +module.exports = Controller; + + + diff --git a/modules/beers/model.js b/modules/beers/model.js new file mode 100644 index 000000000..bffcc1c4a --- /dev/null +++ b/modules/beers/model.js @@ -0,0 +1,31 @@ +var mongoose = require('mongoose'); +mongoose.connect('mongodb://localhost/workshop-online-julho-2015'); + +var db = mongoose.connection; +db.on('error', function(err){ + console.log('Erro de conexao.', err); +}); +db.on('open', function () { + console.log('Conexão aberta.'); +}); +db.on('connected', function(err){ + console.log('Conectado'); +}); +db.on('disconnected', function(err){ + console.log('Desconectado'); +}); + +var Schema = mongoose.Schema + , _schema = { + name: { type: String, default: '' } + , description: { type: String, default: '' } + , alcohol: { type: Number, min: 0, default: '' } + , price: { type: Number, min: 0, default: '' } + , category: { type: String, default: ''} + , created_at: { type: Date, default: Date.now() } + } + , ModelSchema = new Schema(_schema) + , Model = mongoose.model('Beer', ModelSchema) + ; + +module.exports = Model; \ No newline at end of file diff --git a/modules/beers/routes/api.js b/modules/beers/routes/api.js new file mode 100644 index 000000000..7e1bc9960 --- /dev/null +++ b/modules/beers/routes/api.js @@ -0,0 +1,12 @@ +var express = require('express'); +var router = express.Router(); +var Controller = require('./../controller'); + +router.get('/', Controller.retrieve); +router.get('/:id', Controller.get); + +router.post('/', Controller.create); +router.put('/:id', Controller.update); +router.delete('/:id', Controller.delete); + +module.exports = router; \ No newline at end of file diff --git a/modules/beers/routes/index.js b/modules/beers/routes/index.js new file mode 100644 index 000000000..1a5b51ab3 --- /dev/null +++ b/modules/beers/routes/index.js @@ -0,0 +1,10 @@ +var express = require('express'); +var router = express.Router(); +var Controller = require('./../controller'); + +router.get('/', Controller.renderList); +router.get('/create', Controller.renderCreate); +router.get('/:id', Controller.renderGet); +router.get('/:id/edit', Controller.renderEdit); + +module.exports = router; \ No newline at end of file diff --git a/package.json b/package.json index cc41d73a8..63e72ca05 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "prestart": "npm install", - "start": "node bin/www" + "start": "nodemon bin/www" }, "dependencies": { "body-parser": "^1.0.2", @@ -13,6 +13,7 @@ "express": "~4.1.1", "jade": "~0.31.2", "method-override": "^1.0.0", + "mongoose": "^4.1.0", "morgan": "^1.0.0" } } From 790da7e810bb6b061baff4fcf7a539df4bc6ae88 Mon Sep 17 00:00:00 2001 From: Suissa Date: Fri, 31 Jul 2015 21:25:28 -0300 Subject: [PATCH 10/10] Integrada a API de beers criada na aula passada --- app.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app.js b/app.js index ae51ed9a2..ad293a436 100644 --- a/app.js +++ b/app.js @@ -54,6 +54,7 @@ app.use('/partials', partials); // JSON API app.use('/api', api); +app.use('/api/beers', modulesAPI.beers); // redirect all others to the index (HTML5 history) app.get('*', function(req, res, next) {