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 diff --git a/app.js b/app.js index f09e09d96..ad293a436 100644 --- a/app.js +++ b/app.js @@ -1,21 +1,20 @@ - -/** - * Module dependencies - */ - -var express = require('express'), - bodyParser = require('body-parser'), - methodOverride = require('method-override'), - errorHandler = require('error-handler'), - morgan = require('morgan'), - routes = require('./routes'), - 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(); - /** * Configuration */ @@ -25,7 +24,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 +33,7 @@ var env = process.env.NODE_ENV || 'development'; // development only if (env === 'development') { - app.use(express.errorHandler()); + app.use(errorHandler()); } // production only @@ -46,21 +46,43 @@ 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); +app.use('/api/beers', modulesAPI.beers); // redirect all others to the index (HTML5 history) -app.get('*', routes.index); - +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/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 4b627f3e8..63e72ca05 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,18 @@ "name": "application-name", "version": "0.0.1", "private": true, + "scripts": { + "prestart": "npm install", + "start": "nodemon bin/www" + }, "dependencies": { "body-parser": "^1.0.2", - "error-handler": "^0.1.4", + "debug": "^2.0.0", + "errorhandler": "^1.1.1", "express": "~4.1.1", "jade": "~0.31.2", "method-override": "^1.0.0", + "mongoose": "^4.1.0", "morgan": "^1.0.0" } } 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..cffa611e1 --- /dev/null +++ b/routes/partials.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +router.get('/:name', function(req, res) { + var name = req.params.name; + res.render('partials/' + name); +}); + +module.exports = router; \ No newline at end of file