From 64f1e3bf017b1b600036e930790bc7588e2a4785 Mon Sep 17 00:00:00 2001 From: Meutel Date: Thu, 22 May 2014 21:08:41 +0200 Subject: [PATCH] route author: list, single --- bin/www | 9 ++++++ bouquins.js | 74 ++++++++++++++++++++++++++++++++++++++++++++++ config/config.json | 5 ---- package.json | 16 +++++++--- routes/author.js | 25 ++++++++++++++++ routes/book.js | 9 ++++++ routes/index.js | 9 ++++++ routes/serie.js | 9 ++++++ routes/tag.js | 9 ++++++ views/error.jade | 6 ++++ views/index.jade | 5 ++++ views/layout.jade | 7 +++++ 12 files changed, 174 insertions(+), 9 deletions(-) create mode 100755 bin/www create mode 100644 bouquins.js delete mode 100644 config/config.json create mode 100644 routes/author.js create mode 100644 routes/book.js create mode 100644 routes/index.js create mode 100644 routes/serie.js create mode 100644 routes/tag.js create mode 100644 views/error.jade create mode 100644 views/index.jade create mode 100644 views/layout.jade diff --git a/bin/www b/bin/www new file mode 100755 index 0000000..9a7d36a --- /dev/null +++ b/bin/www @@ -0,0 +1,9 @@ +#!/usr/bin/nodejs +var debug = require('debug')('bouquins'); +var app = require('../bouquins'); + +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/bouquins.js b/bouquins.js new file mode 100644 index 0000000..5c6a4fd --- /dev/null +++ b/bouquins.js @@ -0,0 +1,74 @@ +var express = require('express'); +var path = require('path'); +var favicon = require('static-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); +var sqlite3 = require('sqlite3').verbose(); + +var routes = require('./routes/index'); +var author = require('./routes/author'); +var book = require('./routes/book'); +var tag = require('./routes/tag'); +var serie = require('./routes/serie'); + +var app = express(); + +// view engine setup +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', 'jade'); + +// db setup +var db = new sqlite3.Database('/home/meutel/metadata.db'); + +app.use(function(req, res, next) { + req.db = db; + next(); +}); + +app.use(favicon()); +app.use(logger('dev')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded()); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'public'))); + +app.use('/', routes); +app.use('/author', author); +app.use('/book', book); +app.use('/tag', tag); +app.use('/serie', serie); + +/// catch 404 and forwarding to error handler +app.use(function(req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); +}); + +/// 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 + }); + }); +} + +// 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/config/config.json b/config/config.json deleted file mode 100644 index 4142b0e..0000000 --- a/config/config.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "httpPort":8080, - "debugLevel":"debug", - "dbfile": "/home/meutel/metadata.db" -} diff --git a/package.json b/package.json index 6052cd8..cb969df 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,18 @@ "url" : "TODO", "author" : "Meutel ", "private" : true, - "dependencies" : { - "express": "3.x" + "dependencies": { + "express": "~4.0.0", + "static-favicon": "~1.0.0", + "morgan": "~1.0.0", + "cookie-parser": "~1.0.1", + "body-parser": "~1.0.0", + "debug": "~0.7.4", + "jade": "~1.3.0", + "sqlite3": "~2.2.0" + }, + "scripts": { + "start": "nodejs ./bin/www" }, - "main" : "./lib/bouquins", - "bin" : { "bootstrap" : "./bin/bootstrap" }, "version" : "0.1.0" } diff --git a/routes/author.js b/routes/author.js new file mode 100644 index 0000000..350c326 --- /dev/null +++ b/routes/author.js @@ -0,0 +1,25 @@ +var express = require('express'); +var router = express.Router(); + +/* All authors */ +router.get('/', function(req, res) { + var query = 'SELECT * FROM authors '; + query += ' LIMIT ? OFFSET ?'; + var authors = new Array(); + var perpage = req.query.perpage; + perpage = perpage ? perpage : 10; + req.db.each(query, perpage, 0, function (err, row) { + authors.push(row); + }, function(err) { + res.json(authors); + }); +}); + +/* Single author */ +router.get('/:id', function(req, res) { + req.db.get('SELECT * FROM authors WHERE id = ?', req.params.id, function(err, row) { + res.json(row); + }); +}); + +module.exports = router; diff --git a/routes/book.js b/routes/book.js new file mode 100644 index 0000000..f374aa2 --- /dev/null +++ b/routes/book.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET home page. */ +router.get('/', function(req, res) { + res.render('index', { title: 'Books' }); +}); + +module.exports = router; diff --git a/routes/index.js b/routes/index.js new file mode 100644 index 0000000..896c948 --- /dev/null +++ b/routes/index.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET home page. */ +router.get('/', function(req, res) { + res.render('index', { title: 'Express' }); +}); + +module.exports = router; diff --git a/routes/serie.js b/routes/serie.js new file mode 100644 index 0000000..630eed1 --- /dev/null +++ b/routes/serie.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET home page. */ +router.get('/', function(req, res) { + res.render('index', { title: 'Series' }); +}); + +module.exports = router; diff --git a/routes/tag.js b/routes/tag.js new file mode 100644 index 0000000..643cb1c --- /dev/null +++ b/routes/tag.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET home page. */ +router.get('/', function(req, res) { + res.render('index', { title: 'Tags' }); +}); + +module.exports = router; diff --git a/views/error.jade b/views/error.jade new file mode 100644 index 0000000..51ec12c --- /dev/null +++ b/views/error.jade @@ -0,0 +1,6 @@ +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} diff --git a/views/index.jade b/views/index.jade new file mode 100644 index 0000000..3d63b9a --- /dev/null +++ b/views/index.jade @@ -0,0 +1,5 @@ +extends layout + +block content + h1= title + p Welcome to #{title} diff --git a/views/layout.jade b/views/layout.jade new file mode 100644 index 0000000..b945f57 --- /dev/null +++ b/views/layout.jade @@ -0,0 +1,7 @@ +doctype html +html + head + title= title + link(rel='stylesheet', href='/stylesheets/style.css') + body + block content \ No newline at end of file