diff --git a/Chapter07/adding-a-view-layer/express-template-strings/index.js b/Chapter07/adding-a-view-layer/express-template-strings/index.js deleted file mode 100644 index a698855..0000000 --- a/Chapter07/adding-a-view-layer/express-template-strings/index.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict' - -const express = require('express') -const {join} = require('path') -const index = require('./routes/index') - -const app = express() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -if (dev) { - app.use(express.static(join(__dirname, 'public'))) -} - -app.use('/', index) - -app.listen(port, () => { - console.log(`Server listening on port ${port}`) -}) \ No newline at end of file diff --git a/Chapter07/adding-a-view-layer/express-template-strings/public/styles.css b/Chapter07/adding-a-view-layer/express-template-strings/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/adding-a-view-layer/express-template-strings/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/adding-a-view-layer/express-template-strings/routes/index.js b/Chapter07/adding-a-view-layer/express-template-strings/routes/index.js deleted file mode 100644 index 3101e79..0000000 --- a/Chapter07/adding-a-view-layer/express-template-strings/routes/index.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict' - -const {Router} = require('express') -const router = Router() -const views = { - index: require('../views/index') -} - -router.get('/', function(req, res, next()) { - const title = 'Express' - res.send(views.index({title})) - next() -}) - -module.exports = router diff --git a/Chapter07/adding-a-view-layer/express-template-strings/views/index.js b/Chapter07/adding-a-view-layer/express-template-strings/views/index.js deleted file mode 100644 index 0f8e2c4..0000000 --- a/Chapter07/adding-a-view-layer/express-template-strings/views/index.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict' - -module.exports = function indexView ({title}) { - return ` - - ${title} - - - -

${title}

-

Welcome to ${title}

- - ` -} \ No newline at end of file diff --git a/Chapter07/adding-a-view-layer/express-views/index.js b/Chapter07/adding-a-view-layer/express-views/index.js deleted file mode 100644 index 7cffd67..0000000 --- a/Chapter07/adding-a-view-layer/express-views/index.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict' - -const express = require('express') -const {join} = require('path') -const index = require('./routes/index') - -const app = express() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -app.set('views', join(__dirname, 'views')) -app.set('view engine', 'ejs') - -if (dev) { - app.use(express.static(join(__dirname, 'public'))) -} - -app.use('/', index) - -app.listen(port, () => { - console.log(`Server listening on port ${port}`) -}) \ No newline at end of file diff --git a/Chapter07/adding-a-view-layer/express-views/public/styles.css b/Chapter07/adding-a-view-layer/express-views/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/adding-a-view-layer/express-views/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/adding-a-view-layer/express-views/routes/index.js b/Chapter07/adding-a-view-layer/express-views/routes/index.js deleted file mode 100644 index 0a8ec96..0000000 --- a/Chapter07/adding-a-view-layer/express-views/routes/index.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict' - -const {Router} = require('express') -const router = Router() - -router.get('/', function(req, res) { - const title = 'Express' - res.render('index', {title: 'Express'}) -}) - -module.exports = router diff --git a/Chapter07/adding-a-view-layer/express-views/views/index.ejs b/Chapter07/adding-a-view-layer/express-views/views/index.ejs deleted file mode 100644 index 02aec40..0000000 --- a/Chapter07/adding-a-view-layer/express-views/views/index.ejs +++ /dev/null @@ -1,10 +0,0 @@ - - - <%= title %> - - - -

<%= title %>

-

Welcome to <%= title %>

- - \ No newline at end of file diff --git a/Chapter07/adding-a-view-layer/hapi-views/index.js b/Chapter07/adding-a-view-layer/hapi-views/index.js deleted file mode 100644 index 0c6dc74..0000000 --- a/Chapter07/adding-a-view-layer/hapi-views/index.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict' - -const hapi = require('hapi') -const inert = require('inert') -const vision = require('vision') -const ejs = require('ejs') -const routes = { - index: require('./routes/index'), - devStatic: require('./routes/dev-static') -} - -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -const server = new hapi.Server() - -server.connection({ - host: 'localhost', - port: port -}) - -const plugins = dev ? [vision, inert] : [vision] -server.register(plugins, start) - -function start (err) { - if (err) throw err - - server.views({ - engines: { ejs }, - relativeTo: __dirname, - path: 'views' - }) - - routes.index(server) - - if (dev) routes.devStatic(server) - - server.start((err) => { - if (err) throw err - console.log(`Server listening on port ${port}`) - }) -} \ No newline at end of file diff --git a/Chapter07/adding-a-view-layer/hapi-views/public/styles.css b/Chapter07/adding-a-view-layer/hapi-views/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/adding-a-view-layer/hapi-views/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/adding-a-view-layer/hapi-views/routes/dev-static.js b/Chapter07/adding-a-view-layer/hapi-views/routes/dev-static.js deleted file mode 100644 index ccc1c7f..0000000 --- a/Chapter07/adding-a-view-layer/hapi-views/routes/dev-static.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict' - -module.exports = devStatic - -function devStatic (server) { - server.route({ - method: 'GET', - path: '/{param*}', - handler: { - directory: { - path: 'public' - } - } - }) -} diff --git a/Chapter07/adding-a-view-layer/hapi-views/routes/index.js b/Chapter07/adding-a-view-layer/hapi-views/routes/index.js deleted file mode 100644 index 8cf3b92..0000000 --- a/Chapter07/adding-a-view-layer/hapi-views/routes/index.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict' - -module.exports = index - -function index (server) { - server.route({ - method: 'GET', - path: '/', - handler: function (request, reply) { - const title = 'Hapi' - reply.view('index', {title}) - } - }) -} diff --git a/Chapter07/adding-a-view-layer/hapi-views/views/index.ejs b/Chapter07/adding-a-view-layer/hapi-views/views/index.ejs deleted file mode 100644 index 02aec40..0000000 --- a/Chapter07/adding-a-view-layer/hapi-views/views/index.ejs +++ /dev/null @@ -1,10 +0,0 @@ - - - <%= title %> - - - -

<%= title %>

-

Welcome to <%= title %>

- - \ No newline at end of file diff --git a/Chapter07/adding-a-view-layer/koa-views/index.js b/Chapter07/adding-a-view-layer/koa-views/index.js deleted file mode 100644 index f1c07fb..0000000 --- a/Chapter07/adding-a-view-layer/koa-views/index.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict' - -const {join} = require('path') -const Koa = require('koa') -const serve = require('koa-static') -const views = require('koa-views') -const router = require('koa-router')() -const index = require('./routes/index') - -const app = new Koa() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -app.use(views(join(__dirname, 'views'), { - extension: 'ejs' -})) - -if (dev) { - app.use(serve(join(__dirname, 'public'))) -} - -router.use('/', index.routes()) - -app.use(router.routes()) - -app.listen(port, () => { - console.log(`Server listening on port ${port}`) -}) \ No newline at end of file diff --git a/Chapter07/adding-a-view-layer/koa-views/package.json b/Chapter07/adding-a-view-layer/koa-views/package.json deleted file mode 100644 index 1c44556..0000000 --- a/Chapter07/adding-a-view-layer/koa-views/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "ejs": "^2.5.6", - "koa": "^2.2.0", - "koa-router": "^7.1.1", - "koa-static": "^3.0.0", - "koa-views": "^6.0.1" - } -} diff --git a/Chapter07/adding-a-view-layer/koa-views/public/styles.css b/Chapter07/adding-a-view-layer/koa-views/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/adding-a-view-layer/koa-views/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/adding-a-view-layer/koa-views/routes/index.js b/Chapter07/adding-a-view-layer/koa-views/routes/index.js deleted file mode 100644 index 290efe2..0000000 --- a/Chapter07/adding-a-view-layer/koa-views/routes/index.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict' - -const router = require('koa-router')() - -router.get('/', async function (ctx, next) { - await next() - await ctx.render('index') -}, async (ctx) => ctx.state = {title: 'Koa'}) - - -// simplified: -// router.get('/', async (ctx, next) => { -// await ctx.render('index', {title: 'Koa'}) -// }) - -module.exports = router - diff --git a/Chapter07/adding-a-view-layer/koa-views/views/index.ejs b/Chapter07/adding-a-view-layer/koa-views/views/index.ejs deleted file mode 100644 index 02aec40..0000000 --- a/Chapter07/adding-a-view-layer/koa-views/views/index.ejs +++ /dev/null @@ -1,10 +0,0 @@ - - - <%= title %> - - - -

<%= title %>

-

Welcome to <%= title %>

- - \ No newline at end of file diff --git a/Chapter07/adding-logging/express-logging/index.js b/Chapter07/adding-logging/express-logging/index.js deleted file mode 100644 index ddaca05..0000000 --- a/Chapter07/adding-logging/express-logging/index.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict' - -const {join} = require('path') -const express = require('express') -const pino = require('pino')() -const logger = require('express-pino-logger')({ - instance: pino -}) -const index = require('./routes/index') - -const app = express() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -app.set('views', join(__dirname, 'views')) -app.set('view engine', 'ejs') - -app.use(logger) - -if (dev) { - app.use(express.static(join(__dirname, 'public'))) -} - -app.use('/', index) - -app.listen(port, () => { - pino.info(`Server listening on port ${port}`) -}) \ No newline at end of file diff --git a/Chapter07/adding-logging/express-logging/public/styles.css b/Chapter07/adding-logging/express-logging/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/adding-logging/express-logging/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/adding-logging/express-logging/routes/index.js b/Chapter07/adding-logging/express-logging/routes/index.js deleted file mode 100644 index 8f84469..0000000 --- a/Chapter07/adding-logging/express-logging/routes/index.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict' - -const {Router} = require('express') -const router = Router() - -router.get('/', function (req, res) { - const title = 'Express' - req.log.info(`rendering index view with ${title}`) - res.render('index', {title: 'Express'}) -}) - -module.exports = router diff --git a/Chapter07/adding-logging/express-logging/views/index.ejs b/Chapter07/adding-logging/express-logging/views/index.ejs deleted file mode 100644 index 02aec40..0000000 --- a/Chapter07/adding-logging/express-logging/views/index.ejs +++ /dev/null @@ -1,10 +0,0 @@ - - - <%= title %> - - - -

<%= title %>

-

Welcome to <%= title %>

- - \ No newline at end of file diff --git a/Chapter07/adding-logging/express-morgan-logging/index.js b/Chapter07/adding-logging/express-morgan-logging/index.js deleted file mode 100644 index f14bbcc..0000000 --- a/Chapter07/adding-logging/express-morgan-logging/index.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict' - -const {join} = require('path') -const express = require('express') -const morgan = require('morgan') -const index = require('./routes/index') - -const app = express() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -app.set('views', join(__dirname, 'views')) -app.set('view engine', 'ejs') - -app.use(morgan('common')) - -if (dev) { - app.use(express.static(join(__dirname, 'public'))) -} - -app.use('/', index) - -app.listen(port, () => { - console.log(`Server listening on port ${port}`) -}) \ No newline at end of file diff --git a/Chapter07/adding-logging/express-morgan-logging/package.json b/Chapter07/adding-logging/express-morgan-logging/package.json deleted file mode 100644 index 2b282f0..0000000 --- a/Chapter07/adding-logging/express-morgan-logging/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "ejs": "^2.5.6", - "express": "^4.15.2", - "morgan": "^1.8.1" - } -} diff --git a/Chapter07/adding-logging/express-morgan-logging/public/styles.css b/Chapter07/adding-logging/express-morgan-logging/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/adding-logging/express-morgan-logging/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/adding-logging/express-morgan-logging/routes/index.js b/Chapter07/adding-logging/express-morgan-logging/routes/index.js deleted file mode 100644 index 64a4c62..0000000 --- a/Chapter07/adding-logging/express-morgan-logging/routes/index.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict' - -const {Router} = require('express') -const router = Router() - -router.get('/', function (req, res) { - const title = 'Express' - res.render('index', {title: 'Express'}) -}) - -module.exports = router diff --git a/Chapter07/adding-logging/express-morgan-logging/views/index.ejs b/Chapter07/adding-logging/express-morgan-logging/views/index.ejs deleted file mode 100644 index 02aec40..0000000 --- a/Chapter07/adding-logging/express-morgan-logging/views/index.ejs +++ /dev/null @@ -1,10 +0,0 @@ - - - <%= title %> - - - -

<%= title %>

-

Welcome to <%= title %>

- - \ No newline at end of file diff --git a/Chapter07/adding-logging/express-pino-debug-logging/index.js b/Chapter07/adding-logging/express-pino-debug-logging/index.js deleted file mode 100644 index ddaca05..0000000 --- a/Chapter07/adding-logging/express-pino-debug-logging/index.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict' - -const {join} = require('path') -const express = require('express') -const pino = require('pino')() -const logger = require('express-pino-logger')({ - instance: pino -}) -const index = require('./routes/index') - -const app = express() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -app.set('views', join(__dirname, 'views')) -app.set('view engine', 'ejs') - -app.use(logger) - -if (dev) { - app.use(express.static(join(__dirname, 'public'))) -} - -app.use('/', index) - -app.listen(port, () => { - pino.info(`Server listening on port ${port}`) -}) \ No newline at end of file diff --git a/Chapter07/adding-logging/express-pino-debug-logging/package.json b/Chapter07/adding-logging/express-pino-debug-logging/package.json deleted file mode 100644 index 0b3400b..0000000 --- a/Chapter07/adding-logging/express-pino-debug-logging/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "ejs": "^2.5.6", - "express": "^4.15.2", - "express-pino-logger": "^2.0.0", - "pino": "^4.2.4", - "pino-debug": "^1.0.3" - } -} diff --git a/Chapter07/adding-logging/express-pino-debug-logging/public/styles.css b/Chapter07/adding-logging/express-pino-debug-logging/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/adding-logging/express-pino-debug-logging/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/adding-logging/express-pino-debug-logging/routes/index.js b/Chapter07/adding-logging/express-pino-debug-logging/routes/index.js deleted file mode 100644 index 8f84469..0000000 --- a/Chapter07/adding-logging/express-pino-debug-logging/routes/index.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict' - -const {Router} = require('express') -const router = Router() - -router.get('/', function (req, res) { - const title = 'Express' - req.log.info(`rendering index view with ${title}`) - res.render('index', {title: 'Express'}) -}) - -module.exports = router diff --git a/Chapter07/adding-logging/express-pino-debug-logging/views/index.ejs b/Chapter07/adding-logging/express-pino-debug-logging/views/index.ejs deleted file mode 100644 index 02aec40..0000000 --- a/Chapter07/adding-logging/express-pino-debug-logging/views/index.ejs +++ /dev/null @@ -1,10 +0,0 @@ - - - <%= title %> - - - -

<%= title %>

-

Welcome to <%= title %>

- - \ No newline at end of file diff --git a/Chapter07/adding-logging/express-winston-logging/index.js b/Chapter07/adding-logging/express-winston-logging/index.js deleted file mode 100644 index 9db1c91..0000000 --- a/Chapter07/adding-logging/express-winston-logging/index.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict' - -const express = require('express') -const {join} = require('path') -const winston = require('winston') -const expressWinston = require('express-winston') -const index = require('./routes/index') -const logger = new winston.Logger({ - transports: [ - new winston.transports.Console({ - json: true - }) - ] -}) - -const app = express() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -app.set('views', join(__dirname, 'views')) -app.set('view engine', 'ejs') - -app.use(expressWinston.logger({ - winstonInstance: logger -})) - -if (dev) { - app.use(express.static(join(__dirname, 'public'))) -} - -app.use('/', index) - -app.listen(port, () => { - logger.info(`Server listening on port ${port}`) -}) \ No newline at end of file diff --git a/Chapter07/adding-logging/express-winston-logging/package.json b/Chapter07/adding-logging/express-winston-logging/package.json deleted file mode 100644 index 92654b3..0000000 --- a/Chapter07/adding-logging/express-winston-logging/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "ejs": "^2.5.6", - "express": "^4.15.2", - "express-winston": "^2.3.0", - "winston": "^2.3.1" - } -} diff --git a/Chapter07/adding-logging/express-winston-logging/public/styles.css b/Chapter07/adding-logging/express-winston-logging/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/adding-logging/express-winston-logging/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/adding-logging/express-winston-logging/routes/index.js b/Chapter07/adding-logging/express-winston-logging/routes/index.js deleted file mode 100644 index 0a8ec96..0000000 --- a/Chapter07/adding-logging/express-winston-logging/routes/index.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict' - -const {Router} = require('express') -const router = Router() - -router.get('/', function(req, res) { - const title = 'Express' - res.render('index', {title: 'Express'}) -}) - -module.exports = router diff --git a/Chapter07/adding-logging/express-winston-logging/views/index.ejs b/Chapter07/adding-logging/express-winston-logging/views/index.ejs deleted file mode 100644 index 02aec40..0000000 --- a/Chapter07/adding-logging/express-winston-logging/views/index.ejs +++ /dev/null @@ -1,10 +0,0 @@ - - - <%= title %> - - - -

<%= title %>

-

Welcome to <%= title %>

- - \ No newline at end of file diff --git a/Chapter07/adding-logging/hapi-logging/index.js b/Chapter07/adding-logging/hapi-logging/index.js deleted file mode 100644 index 3ef5961..0000000 --- a/Chapter07/adding-logging/hapi-logging/index.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict' - -const hapi = require('hapi') -const inert = require('inert') -const vision = require('vision') -const ejs = require('ejs') -const pino = require('pino')() -const hapiPino = require('hapi-pino') -const routes = { - index: require('./routes/index'), - devStatic: require('./routes/dev-static') -} - -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -const server = new hapi.Server() - -server.connection({ - host: 'localhost', - port: port -}) - -const plugins = dev ? [{ - register: hapiPino, - options: {instance: pino} -}, vision, inert] : [{ - register: hapiPino, - options: {instance: pino} -}, vision] - -server.register(plugins, start) - -function start (err) { - if (err) throw err - server.views({ - engines: { ejs }, - relativeTo: __dirname, - path: 'views' - }) - - routes.index(server) - - if (dev) routes.devStatic(server) - - server.start((err) => { - if (err) throw err - server.log(`Server listening on port ${port}`) - }) -} \ No newline at end of file diff --git a/Chapter07/adding-logging/hapi-logging/package.json b/Chapter07/adding-logging/hapi-logging/package.json deleted file mode 100644 index 2ed7f05..0000000 --- a/Chapter07/adding-logging/hapi-logging/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "ejs": "^2.5.6", - "hapi": "^16.1.1", - "hapi-pino": "^1.4.1", - "inert": "^4.2.0", - "pino": "^4.2.4", - "vision": "^4.1.1" - } -} diff --git a/Chapter07/adding-logging/hapi-logging/public/styles.css b/Chapter07/adding-logging/hapi-logging/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/adding-logging/hapi-logging/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/adding-logging/hapi-logging/routes/dev-static.js b/Chapter07/adding-logging/hapi-logging/routes/dev-static.js deleted file mode 100644 index ccc1c7f..0000000 --- a/Chapter07/adding-logging/hapi-logging/routes/dev-static.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict' - -module.exports = devStatic - -function devStatic (server) { - server.route({ - method: 'GET', - path: '/{param*}', - handler: { - directory: { - path: 'public' - } - } - }) -} diff --git a/Chapter07/adding-logging/hapi-logging/routes/index.js b/Chapter07/adding-logging/hapi-logging/routes/index.js deleted file mode 100644 index 8c61027..0000000 --- a/Chapter07/adding-logging/hapi-logging/routes/index.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict' - -module.exports = index - -function index (server) { - server.route({ - method: 'GET', - path: '/', - handler: function (request, reply) { - const title = 'Hapi' - request.logger.info(`rendering index view with ${title}`) - reply.view('index', {title}) - } - }) -} diff --git a/Chapter07/adding-logging/hapi-logging/views/index.ejs b/Chapter07/adding-logging/hapi-logging/views/index.ejs deleted file mode 100644 index 02aec40..0000000 --- a/Chapter07/adding-logging/hapi-logging/views/index.ejs +++ /dev/null @@ -1,10 +0,0 @@ - - - <%= title %> - - - -

<%= title %>

-

Welcome to <%= title %>

- - \ No newline at end of file diff --git a/Chapter07/adding-logging/koa-logging/index.js b/Chapter07/adding-logging/koa-logging/index.js deleted file mode 100644 index 1ea62b8..0000000 --- a/Chapter07/adding-logging/koa-logging/index.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict' - -const {join} = require('path') -const Koa = require('koa') -const serve = require('koa-static') -const views = require('koa-views') -const router = require('koa-router')() -const pino = require('pino')() -const logger = require('koa-pino-logger')({ - instance: pino -}) -const index = require('./routes/index') - -const app = new Koa() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -app.use(views(join(__dirname, 'views'), { - extension: 'ejs' -})) - -app.use(logger) - -if (dev) { - app.use(serve(join(__dirname, 'public'))) -} - -router.use('/', index.routes()) - -app.use(router.routes()) - -app.listen(port, () => { - pino.info(`Server listening on port ${port}`) -}) \ No newline at end of file diff --git a/Chapter07/adding-logging/koa-logging/package.json b/Chapter07/adding-logging/koa-logging/package.json deleted file mode 100644 index c609071..0000000 --- a/Chapter07/adding-logging/koa-logging/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "ejs": "^2.5.6", - "koa": "^2.2.0", - "koa-pino-logger": "^2.1.0", - "koa-router": "^7.1.1", - "koa-static": "^3.0.0", - "koa-views": "^6.0.1", - "pino": "^4.2.4" - } -} diff --git a/Chapter07/adding-logging/koa-logging/public/styles.css b/Chapter07/adding-logging/koa-logging/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/adding-logging/koa-logging/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/adding-logging/koa-logging/routes/index.js b/Chapter07/adding-logging/koa-logging/routes/index.js deleted file mode 100644 index fc5a7f6..0000000 --- a/Chapter07/adding-logging/koa-logging/routes/index.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict' - -const router = require('koa-router')() - -router.get('/', async function (ctx, next) { - await next() - ctx.log.info(`rendering index view with ${ctx.state.title}`) - await ctx.render('index') -}, async (ctx) => ctx.state = {title: 'Koa'}) - - -// simplified: -// router.get('/', async (ctx, next) => { -// . ctx.log.info(`rendering index view with ${ctx.state.title}`) -// await ctx.render('index', {title: 'Koa'}) -// }) - -module.exports = router - diff --git a/Chapter07/adding-logging/koa-logging/views/index.ejs b/Chapter07/adding-logging/koa-logging/views/index.ejs deleted file mode 100644 index 02aec40..0000000 --- a/Chapter07/adding-logging/koa-logging/views/index.ejs +++ /dev/null @@ -1,10 +0,0 @@ - - - <%= title %> - - - -

<%= title %>

-

Welcome to <%= title %>

- - \ No newline at end of file diff --git a/Chapter07/creating-a-hapi-web-app/app/index.js b/Chapter07/creating-a-hapi-web-app/app/index.js deleted file mode 100644 index c4d5568..0000000 --- a/Chapter07/creating-a-hapi-web-app/app/index.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict' - -const hapi = require('hapi') -const inert = require('inert') -const routes = { - index: require('./routes/index'), - devStatic: require('./routes/dev-static') -} - -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -const server = new hapi.Server() - -server.connection({ - host: 'localhost', - port: port -}) - -if (dev) server.register(inert, start) -else start() - -function start (err) { - if (err) throw err - - routes.index(server) - - if (dev) routes.devStatic(server) - - server.start((err) => { - if (err) throw err - console.log(`Server listening on port ${port}`) - }) -} diff --git a/Chapter07/creating-a-hapi-web-app/app/public/styles.css b/Chapter07/creating-a-hapi-web-app/app/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/creating-a-hapi-web-app/app/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/creating-a-hapi-web-app/app/routes/dev-static.js b/Chapter07/creating-a-hapi-web-app/app/routes/dev-static.js deleted file mode 100644 index ccc1c7f..0000000 --- a/Chapter07/creating-a-hapi-web-app/app/routes/dev-static.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict' - -module.exports = devStatic - -function devStatic (server) { - server.route({ - method: 'GET', - path: '/{param*}', - handler: { - directory: { - path: 'public' - } - } - }) -} diff --git a/Chapter07/creating-a-hapi-web-app/app/routes/index.js b/Chapter07/creating-a-hapi-web-app/app/routes/index.js deleted file mode 100644 index cfd5646..0000000 --- a/Chapter07/creating-a-hapi-web-app/app/routes/index.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict' - -module.exports = index - -function index (server) { - server.route({ - method: 'GET', - path: '/', - handler: function (request, reply) { - const title = 'Hapi' - reply(` - - - ${title} - - - -

${title}

-

Welcome to ${title}

- - - `) - } - }) -} diff --git a/Chapter07/creating-a-hapi-web-app/custom-plugin-app/index.js b/Chapter07/creating-a-hapi-web-app/custom-plugin-app/index.js deleted file mode 100644 index c969d81..0000000 --- a/Chapter07/creating-a-hapi-web-app/custom-plugin-app/index.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict' - -const hapi = require('hapi') -const inert = require('inert') -const answer = require('./plugins/answer') -const routes = { - index: require('./routes/index'), - devStatic: require('./routes/dev-static') -} - -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -const server = new hapi.Server() - -server.connection({ - host: 'localhost', - port: port -}) - -const plugins = dev ? [answer, inert] : [answer] - -server.register(plugins, start) - -function start (err) { - if (err) throw err - - routes.index(server) - - if (dev) routes.devStatic(server) - - server.start((err) => { - if (err) throw err - console.log(`Server listening on port ${port}`) - }) -} \ No newline at end of file diff --git a/Chapter07/creating-a-hapi-web-app/custom-plugin-app/package.json b/Chapter07/creating-a-hapi-web-app/custom-plugin-app/package.json deleted file mode 100644 index 68f1cb3..0000000 --- a/Chapter07/creating-a-hapi-web-app/custom-plugin-app/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "hapi": "^16.1.1", - "inert": "^4.2.0" - } -} diff --git a/Chapter07/creating-a-hapi-web-app/custom-plugin-app/plugins/answer.js b/Chapter07/creating-a-hapi-web-app/custom-plugin-app/plugins/answer.js deleted file mode 100644 index 38b4473..0000000 --- a/Chapter07/creating-a-hapi-web-app/custom-plugin-app/plugins/answer.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict' - -module.exports = answer - -function answer (server, options, next) { - server.ext('response', (request, reply) => { - request.response.header('X-Answer', 42) - reply.continue() - }) - next() -} - -answer.attributes = {name: 'answer'} \ No newline at end of file diff --git a/Chapter07/creating-a-hapi-web-app/custom-plugin-app/public/styles.css b/Chapter07/creating-a-hapi-web-app/custom-plugin-app/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/creating-a-hapi-web-app/custom-plugin-app/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/creating-a-hapi-web-app/custom-plugin-app/routes/dev-static.js b/Chapter07/creating-a-hapi-web-app/custom-plugin-app/routes/dev-static.js deleted file mode 100644 index ccc1c7f..0000000 --- a/Chapter07/creating-a-hapi-web-app/custom-plugin-app/routes/dev-static.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict' - -module.exports = devStatic - -function devStatic (server) { - server.route({ - method: 'GET', - path: '/{param*}', - handler: { - directory: { - path: 'public' - } - } - }) -} diff --git a/Chapter07/creating-a-hapi-web-app/custom-plugin-app/routes/index.js b/Chapter07/creating-a-hapi-web-app/custom-plugin-app/routes/index.js deleted file mode 100644 index cfd5646..0000000 --- a/Chapter07/creating-a-hapi-web-app/custom-plugin-app/routes/index.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict' - -module.exports = index - -function index (server) { - server.route({ - method: 'GET', - path: '/', - handler: function (request, reply) { - const title = 'Hapi' - reply(` - - - ${title} - - - -

${title}

-

Welcome to ${title}

- - - `) - } - }) -} diff --git a/Chapter07/creating-a-hapi-web-app/label-app/index.js b/Chapter07/creating-a-hapi-web-app/label-app/index.js deleted file mode 100644 index dd84a28..0000000 --- a/Chapter07/creating-a-hapi-web-app/label-app/index.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict' - -const hapi = require('hapi') -const inert = require('inert') -const routes = { - index: require('./routes/index'), - devStatic: require('./routes/dev-static') -} - -const devPort = process.env.DEV_PORT || 3000 -const prodPort = process.env.PORT || 8080 - -const server = new hapi.Server() - -const dev = process.env.NODE_ENV !== 'production' - -if (dev) server.connection({ - host: 'localhost', - port: devPort, - labels: ['dev', 'staging'] -}) - -if (!dev) server.connection({ - host: '0.0.0.0', - port: prodPort, - labels: 'prod' -}) - -server.register({ - register: inert, - select: ['dev', 'staging'] -}, start) - -function start (err) { - if (err) throw err - - routes.index(server) - - routes.devStatic(server) - - server.start((err) => { - if (err) throw err - console.log(`Dev/Staging server listening on port ${devPort}`) - console.log(`Prod server listening on port ${prodPort}`) - }) -} \ No newline at end of file diff --git a/Chapter07/creating-a-hapi-web-app/label-app/package.json b/Chapter07/creating-a-hapi-web-app/label-app/package.json deleted file mode 100644 index 68f1cb3..0000000 --- a/Chapter07/creating-a-hapi-web-app/label-app/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "hapi": "^16.1.1", - "inert": "^4.2.0" - } -} diff --git a/Chapter07/creating-a-hapi-web-app/label-app/public/styles.css b/Chapter07/creating-a-hapi-web-app/label-app/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/creating-a-hapi-web-app/label-app/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/creating-a-hapi-web-app/label-app/routes/dev-static.js b/Chapter07/creating-a-hapi-web-app/label-app/routes/dev-static.js deleted file mode 100644 index de9d6fc..0000000 --- a/Chapter07/creating-a-hapi-web-app/label-app/routes/dev-static.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict' - -module.exports = devStatic - -function devStatic (server) { - server.select(['dev', 'staging']).route({ - method: 'GET', - path: '/{param*}', - handler: { - directory: { - path: 'public' - } - } - }) -} diff --git a/Chapter07/creating-a-hapi-web-app/label-app/routes/index.js b/Chapter07/creating-a-hapi-web-app/label-app/routes/index.js deleted file mode 100644 index cfd5646..0000000 --- a/Chapter07/creating-a-hapi-web-app/label-app/routes/index.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict' - -module.exports = index - -function index (server) { - server.route({ - method: 'GET', - path: '/', - handler: function (request, reply) { - const title = 'Hapi' - reply(` - - - ${title} - - - -

${title}

-

Welcome to ${title}

- - - `) - } - }) -} diff --git a/Chapter07/creating-a-koa-web-app/app/index.js b/Chapter07/creating-a-koa-web-app/app/index.js deleted file mode 100644 index caa4ee2..0000000 --- a/Chapter07/creating-a-koa-web-app/app/index.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict' - -const {join} = require('path') -const Koa = require('koa') -const serve = require('koa-static') -const router = require('koa-router')() -const index = require('./routes/index') - -const app = new Koa() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -if (dev) { - app.use(serve(join(__dirname, 'public'))) -} - -router.use('/', index.routes()) - -app.use(router.routes()) - -app.listen(port, () => { - console.log(`Server listening on port ${port}`) -}) diff --git a/Chapter07/creating-a-koa-web-app/app/package.json b/Chapter07/creating-a-koa-web-app/app/package.json deleted file mode 100644 index bc15d27..0000000 --- a/Chapter07/creating-a-koa-web-app/app/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "koa": "^2.2.0", - "koa-router": "^7.1.1", - "koa-static": "^3.0.0" - } -} diff --git a/Chapter07/creating-a-koa-web-app/app/public/styles.css b/Chapter07/creating-a-koa-web-app/app/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/creating-a-koa-web-app/app/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/creating-a-koa-web-app/app/routes/index.js b/Chapter07/creating-a-koa-web-app/app/routes/index.js deleted file mode 100644 index 76287b4..0000000 --- a/Chapter07/creating-a-koa-web-app/app/routes/index.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict' - -const router = require('koa-router')() - -router.get('/', async function (ctx, next) { - await next() - const { title } = ctx.state - ctx.body = ` - - - ${title} - - - -

${title}

-

Welcome to ${title}

- - - ` -}, async (ctx) => ctx.state = {title: 'Koa'}) - -module.exports = router diff --git a/Chapter07/creating-a-koa-web-app/async-ops-app/index.js b/Chapter07/creating-a-koa-web-app/async-ops-app/index.js deleted file mode 100644 index caa4ee2..0000000 --- a/Chapter07/creating-a-koa-web-app/async-ops-app/index.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict' - -const {join} = require('path') -const Koa = require('koa') -const serve = require('koa-static') -const router = require('koa-router')() -const index = require('./routes/index') - -const app = new Koa() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -if (dev) { - app.use(serve(join(__dirname, 'public'))) -} - -router.use('/', index.routes()) - -app.use(router.routes()) - -app.listen(port, () => { - console.log(`Server listening on port ${port}`) -}) diff --git a/Chapter07/creating-a-koa-web-app/async-ops-app/package.json b/Chapter07/creating-a-koa-web-app/async-ops-app/package.json deleted file mode 100644 index bc15d27..0000000 --- a/Chapter07/creating-a-koa-web-app/async-ops-app/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "koa": "^2.2.0", - "koa-router": "^7.1.1", - "koa-static": "^3.0.0" - } -} diff --git a/Chapter07/creating-a-koa-web-app/async-ops-app/public/styles.css b/Chapter07/creating-a-koa-web-app/async-ops-app/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/creating-a-koa-web-app/async-ops-app/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/creating-a-koa-web-app/async-ops-app/routes/index.js b/Chapter07/creating-a-koa-web-app/async-ops-app/routes/index.js deleted file mode 100644 index 513100f..0000000 --- a/Chapter07/creating-a-koa-web-app/async-ops-app/routes/index.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict' - -const router = require('koa-router')() - -router.get('/', async function (ctx, next) { - const title = await pretendDbLookup('title') - ctx.body = ` - - - ${title} - - - -

${title}

-

Welcome to ${title}

- - - ` -}) - -function pretendDbLookup () { - return Promise.resolve('Koa') -} - -module.exports = router diff --git a/Chapter07/creating-a-koa-web-app/custom-middleware-app/index.js b/Chapter07/creating-a-koa-web-app/custom-middleware-app/index.js deleted file mode 100644 index c77a427..0000000 --- a/Chapter07/creating-a-koa-web-app/custom-middleware-app/index.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict' - -const Koa = require('koa') -const serve = require('koa-static') -const router = require('koa-router')() -const {join} = require('path') -const index = require('./routes/index') -const answer = require('./middleware/answer') - -const app = new Koa() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -app.use(answer()) - -if (dev) { - app.use(serve(join(__dirname, 'public'))) -} - -router.use('/', index.routes(), index.allowedMethods()) - -app.use(router.routes()) -app.use(router.allowedMethods()) - -app.listen(port, () => { - console.log(`Server listening on port ${port}`) -}) \ No newline at end of file diff --git a/Chapter07/creating-a-koa-web-app/custom-middleware-app/middleware/answer.js b/Chapter07/creating-a-koa-web-app/custom-middleware-app/middleware/answer.js deleted file mode 100644 index 7766dd6..0000000 --- a/Chapter07/creating-a-koa-web-app/custom-middleware-app/middleware/answer.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict' - -module.exports = answer - -function answer () { - return async (ctx, next) => { - ctx.set('X-Answer', 42) - await next() - } -} diff --git a/Chapter07/creating-a-koa-web-app/custom-middleware-app/package.json b/Chapter07/creating-a-koa-web-app/custom-middleware-app/package.json deleted file mode 100644 index bc15d27..0000000 --- a/Chapter07/creating-a-koa-web-app/custom-middleware-app/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "koa": "^2.2.0", - "koa-router": "^7.1.1", - "koa-static": "^3.0.0" - } -} diff --git a/Chapter07/creating-a-koa-web-app/custom-middleware-app/public/styles.css b/Chapter07/creating-a-koa-web-app/custom-middleware-app/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/creating-a-koa-web-app/custom-middleware-app/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/creating-a-koa-web-app/custom-middleware-app/routes/index.js b/Chapter07/creating-a-koa-web-app/custom-middleware-app/routes/index.js deleted file mode 100644 index 76287b4..0000000 --- a/Chapter07/creating-a-koa-web-app/custom-middleware-app/routes/index.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict' - -const router = require('koa-router')() - -router.get('/', async function (ctx, next) { - await next() - const { title } = ctx.state - ctx.body = ` - - - ${title} - - - -

${title}

-

Welcome to ${title}

- - - ` -}, async (ctx) => ctx.state = {title: 'Koa'}) - -module.exports = router diff --git a/Chapter07/creating-an-express-web-app/app/index.js b/Chapter07/creating-an-express-web-app/app/index.js deleted file mode 100644 index 75ee4cb..0000000 --- a/Chapter07/creating-an-express-web-app/app/index.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict' - -const {join} = require('path') -const express = require('express') -const index = require('./routes/index') - -const app = express() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -if (dev) { - app.use(express.static(join(__dirname, 'public'))) -} - -app.use('/', index) - -app.listen(port, () => { - console.log(`Server listening on port ${port}`) -}) \ No newline at end of file diff --git a/Chapter07/creating-an-express-web-app/app/public/styles.css b/Chapter07/creating-an-express-web-app/app/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/creating-an-express-web-app/app/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/creating-an-express-web-app/app/routes/index.js b/Chapter07/creating-an-express-web-app/app/routes/index.js deleted file mode 100644 index a33053d..0000000 --- a/Chapter07/creating-an-express-web-app/app/routes/index.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict' - -const {Router} = require('express') -const router = Router() - -router.get('/', function (req, res) { - const title = 'Express' - res.send(` - - - ${title} - - - -

${title}

-

Welcome to ${title}

- - - `) -}) - -module.exports = router diff --git a/Chapter07/creating-an-express-web-app/custom-middleware-app/index.js b/Chapter07/creating-an-express-web-app/custom-middleware-app/index.js deleted file mode 100644 index 753a31f..0000000 --- a/Chapter07/creating-an-express-web-app/custom-middleware-app/index.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict' - -const express = require('express') -const {join} = require('path') -const index = require('./routes/index') -const answer = require('./middleware/answer') - -const app = express() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -app.use(answer()) - -if (dev) { - app.use(express.static(join(__dirname, 'public'))) -} - -app.use('/', index) - -app.use((req, res, next) => { - next(Object.assign(Error('Not Found'), {status: 404})) -}) - -app.listen(port, () => { - console.log(`Server listening on port ${port}`) -}) \ No newline at end of file diff --git a/Chapter07/creating-an-express-web-app/custom-middleware-app/middleware/answer.js b/Chapter07/creating-an-express-web-app/custom-middleware-app/middleware/answer.js deleted file mode 100644 index e7dd3d2..0000000 --- a/Chapter07/creating-an-express-web-app/custom-middleware-app/middleware/answer.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict' - -module.exports = answer - -function answer () { - return (req, res, next) => { - res.setHeader('X-Answer', 42) - next() - } -} \ No newline at end of file diff --git a/Chapter07/creating-an-express-web-app/custom-middleware-app/package.json b/Chapter07/creating-an-express-web-app/custom-middleware-app/package.json deleted file mode 100644 index 8711bc5..0000000 --- a/Chapter07/creating-an-express-web-app/custom-middleware-app/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "express": "^4.15.2" - } -} diff --git a/Chapter07/creating-an-express-web-app/custom-middleware-app/public/styles.css b/Chapter07/creating-an-express-web-app/custom-middleware-app/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/creating-an-express-web-app/custom-middleware-app/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/creating-an-express-web-app/custom-middleware-app/routes/index.js b/Chapter07/creating-an-express-web-app/custom-middleware-app/routes/index.js deleted file mode 100644 index c1ab84d..0000000 --- a/Chapter07/creating-an-express-web-app/custom-middleware-app/routes/index.js +++ /dev/null @@ -1,20 +0,0 @@ -const {Router} = require('express') -const router = Router() - -router.get('/', function(req, res, next) { - const title = 'Express' - res.send(` - - - ${title} - - - -

${title}

-

Welcome to ${title}

- - - `) -}) - -module.exports = router diff --git a/Chapter07/creating-an-express-web-app/params-postable-app/index.js b/Chapter07/creating-an-express-web-app/params-postable-app/index.js deleted file mode 100644 index 555a95d..0000000 --- a/Chapter07/creating-an-express-web-app/params-postable-app/index.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict' - -const {join} = require('path') -const express = require('express') -const bodyParser = require('body-parser') -const index = require('./routes/index') - -const app = express() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -app.use(bodyParser.urlencoded({extended: false})) - -if (dev) { - app.use(express.static(join(__dirname, 'public'))) -} - -app.use('/', index) - -app.listen(port, () => { - console.log(`Server listening on port ${port}`) -}) \ No newline at end of file diff --git a/Chapter07/creating-an-express-web-app/params-postable-app/package.json b/Chapter07/creating-an-express-web-app/params-postable-app/package.json deleted file mode 100644 index 6be7c1c..0000000 --- a/Chapter07/creating-an-express-web-app/params-postable-app/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "body-parser": "^1.17.1", - "express": "^4.15.2" - } -} diff --git a/Chapter07/creating-an-express-web-app/params-postable-app/public/styles.css b/Chapter07/creating-an-express-web-app/params-postable-app/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/creating-an-express-web-app/params-postable-app/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/creating-an-express-web-app/params-postable-app/routes/index.js b/Chapter07/creating-an-express-web-app/params-postable-app/routes/index.js deleted file mode 100644 index d33985f..0000000 --- a/Chapter07/creating-an-express-web-app/params-postable-app/routes/index.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict' - -const {Router} = require('express') -const router = Router() - -router.get('/:name?', function (req, res) { - const title = 'Express' - // CAUTION: never place user input - // directly into HTML output in production - // without sanitizing it first. Otherwise, we make - // ourselves vulnerable to XSS attacks. - // See Chapter 8 Dealing with Security for details - const name = req.params.name - res.send(` - - - ${title} - - - -

${title}

-

Welcome to ${title}${name ? `, ${name}.` : ''}

-
- Name: -
- - - `) -}) - -router.post('/data', function (req, res) { - res.redirect(`/${req.body.name}`) -}) - -module.exports = router diff --git a/Chapter07/implementing-authentication/express-authentication/index.js b/Chapter07/implementing-authentication/express-authentication/index.js deleted file mode 100644 index 4fd5bb9..0000000 --- a/Chapter07/implementing-authentication/express-authentication/index.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict' - -const {join} = require('path') -const express = require('express') -const pino = require('pino')() -const logger = require('express-pino-logger')({ - instance: pino -}) -const session = require('express-session') -const bodyParser = require('body-parser') -const index = require('./routes/index') -const auth = require('./routes/auth') - -const app = express() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -app.set('views', join(__dirname, 'views')) -app.set('view engine', 'ejs') -if (!dev) app.set('trust proxy', 1) - -app.use(logger) -app.use(session({ - secret: 'I like pies', - resave: false, - saveUninitialized: false, - cookie: {secure: !dev} -})) -app.use(bodyParser.urlencoded({extended: false})) - -if (dev) { - app.use(express.static(join(__dirname, 'public'))) -} - -app.use('/', index) -app.use('/auth', auth) - -app.listen(port, () => { - pino.info(`Server listening on port ${port}`) -}) \ No newline at end of file diff --git a/Chapter07/implementing-authentication/express-authentication/package.json b/Chapter07/implementing-authentication/express-authentication/package.json deleted file mode 100644 index 20becd0..0000000 --- a/Chapter07/implementing-authentication/express-authentication/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "body-parser": "^1.17.1", - "ejs": "^2.5.6", - "express": "^4.15.2", - "express-pino-logger": "^2.0.0", - "express-session": "^1.15.2", - "pino": "^4.2.4" - } -} diff --git a/Chapter07/implementing-authentication/express-authentication/public/styles.css b/Chapter07/implementing-authentication/express-authentication/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/implementing-authentication/express-authentication/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/implementing-authentication/express-authentication/routes/auth.js b/Chapter07/implementing-authentication/express-authentication/routes/auth.js deleted file mode 100644 index ee99e82..0000000 --- a/Chapter07/implementing-authentication/express-authentication/routes/auth.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict' - -const { Router } = require('express') -const router = Router() - -router.get('/login', function (req, res, next) { - res.render('login', {fail: false}) - next() -}) - -router.post('/login', function (req, res, next) { - if (req.session.user) { - res.redirect('/') - next() - return - } - if (req.body.un === 'dave' && req.body.pw === 'ncb') { - req.session.user = {name: req.body.un} - res.redirect('/') - next() - return - } - - res.render('login', {fail: true}) - - next() -}) - -router.get('/logout', function (req, res, next) { - req.session.user = null - res.redirect('/') -}) - -module.exports = router diff --git a/Chapter07/implementing-authentication/express-authentication/routes/index.js b/Chapter07/implementing-authentication/express-authentication/routes/index.js deleted file mode 100644 index e1ddd04..0000000 --- a/Chapter07/implementing-authentication/express-authentication/routes/index.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict' - -const {Router} = require('express') -const router = Router() - -router.get('/', function (req, res) { - const title = 'Express' - req.log.info(`rendering index view with ${title}`) - const user = req.session.user - res.render('index', {title, user}) -}) - -module.exports = router diff --git a/Chapter07/implementing-authentication/express-authentication/views/index.ejs b/Chapter07/implementing-authentication/express-authentication/views/index.ejs deleted file mode 100644 index 6d52625..0000000 --- a/Chapter07/implementing-authentication/express-authentication/views/index.ejs +++ /dev/null @@ -1,16 +0,0 @@ - - - <%= title %> - - - -

<%= title %>

-

Welcome to <%= title %>

- <% if (user) { %> -

Hi <%= user.name %>!

-

Logout

- <% } else { %> -

Login

- <% } %> - - \ No newline at end of file diff --git a/Chapter07/implementing-authentication/express-authentication/views/login.ejs b/Chapter07/implementing-authentication/express-authentication/views/login.ejs deleted file mode 100644 index 3adbd80..0000000 --- a/Chapter07/implementing-authentication/express-authentication/views/login.ejs +++ /dev/null @@ -1,17 +0,0 @@ - - - Login - - - -

Login

- <% if (fail) { %> -

Try Again

- <% } %> -
- User:
- Pass:
- -
- - \ No newline at end of file diff --git a/Chapter07/implementing-authentication/hapi-authentication/index.js b/Chapter07/implementing-authentication/hapi-authentication/index.js deleted file mode 100644 index dceebc8..0000000 --- a/Chapter07/implementing-authentication/hapi-authentication/index.js +++ /dev/null @@ -1,69 +0,0 @@ -'use strict' - -const hapi = require('hapi') -const inert = require('inert') -const vision = require('vision') -const ejs = require('ejs') -const pino = require('pino')() -const hapiPino = require('hapi-pino') -const yar = require('yar') -const routes = { - index: require('./routes/index'), - auth: require('./routes/auth'), - devStatic: require('./routes/dev-static') -} - -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -const server = new hapi.Server() - -server.connection({ - host: '127.0.0.1', - port: port -}) - -const plugins = dev ? [{ - register: hapiPino, - options: {instance: pino} -}, { - register: yar, - options: { - cookieOptions: { - password: 'I really really really like pies', - isSecure: false - } - } -}, vision, inert] : [{ - register: hapiPino, - options: {instance: pino} -}, { - register: yar, - options: { - cookieOptions: { - password: 'something more secure than a bit about pies', - isSecure: true - } - } -}, vision] - -server.register(plugins, start) - -function start (err) { - if (err) throw err - server.views({ - engines: { ejs }, - relativeTo: __dirname, - path: 'views' - }) - - routes.index(server) - routes.auth(server) - - if (dev) routes.devStatic(server) - - server.start((err) => { - if (err) throw err - server.log(`Server listening on port ${port}`) - }) -} \ No newline at end of file diff --git a/Chapter07/implementing-authentication/hapi-authentication/package.json b/Chapter07/implementing-authentication/hapi-authentication/package.json deleted file mode 100644 index 77e03f9..0000000 --- a/Chapter07/implementing-authentication/hapi-authentication/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "ejs": "^2.5.6", - "hapi": "^16.1.1", - "hapi-pino": "^1.4.1", - "inert": "^4.2.0", - "pino": "^4.2.4", - "vision": "^4.1.1", - "yar": "^8.1.2" - } -} diff --git a/Chapter07/implementing-authentication/hapi-authentication/public/styles.css b/Chapter07/implementing-authentication/hapi-authentication/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/implementing-authentication/hapi-authentication/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/implementing-authentication/hapi-authentication/routes/auth.js b/Chapter07/implementing-authentication/hapi-authentication/routes/auth.js deleted file mode 100644 index aad7c02..0000000 --- a/Chapter07/implementing-authentication/hapi-authentication/routes/auth.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict' - -module.exports = auth - -function auth (server) { - - server.route({ - method: ['GET', 'POST'], - path: '/auth/login', - handler: function (request, reply) { - if (request.auth.isAuthenticated) { - reply.redirect('/'); - return - } - - if (request.method === 'get') { - reply.view('login', {fail: false}) - return - } - - if (request.method === 'post') { - if (request.payload.un === 'dave' && request.payload.pw === 'ncb') { - request.yar.set('user', {name: request.payload.un}) - reply.redirect('/') - } else { - reply.view('login', {fail: true}) - } - } - } - }) - - - server.route({ - method: 'GET', - path: '/auth/logout', - handler: function (request, reply) { - request.yar.reset() - reply.redirect('/') - } - }) -} \ No newline at end of file diff --git a/Chapter07/implementing-authentication/hapi-authentication/routes/dev-static.js b/Chapter07/implementing-authentication/hapi-authentication/routes/dev-static.js deleted file mode 100644 index ccc1c7f..0000000 --- a/Chapter07/implementing-authentication/hapi-authentication/routes/dev-static.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict' - -module.exports = devStatic - -function devStatic (server) { - server.route({ - method: 'GET', - path: '/{param*}', - handler: { - directory: { - path: 'public' - } - } - }) -} diff --git a/Chapter07/implementing-authentication/hapi-authentication/routes/index.js b/Chapter07/implementing-authentication/hapi-authentication/routes/index.js deleted file mode 100644 index 314c961..0000000 --- a/Chapter07/implementing-authentication/hapi-authentication/routes/index.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict' - -module.exports = index - -function index (server) { - server.route({ - method: 'GET', - path: '/', - handler: function (request, reply) { - const title = 'Hapi' - const user = request.yar.get('user') - request.logger.info(`rendering index view with ${title}`) - reply.view('index', {title, user}) - } - }) -} diff --git a/Chapter07/implementing-authentication/hapi-authentication/views/index.ejs b/Chapter07/implementing-authentication/hapi-authentication/views/index.ejs deleted file mode 100644 index 6d52625..0000000 --- a/Chapter07/implementing-authentication/hapi-authentication/views/index.ejs +++ /dev/null @@ -1,16 +0,0 @@ - - - <%= title %> - - - -

<%= title %>

-

Welcome to <%= title %>

- <% if (user) { %> -

Hi <%= user.name %>!

-

Logout

- <% } else { %> -

Login

- <% } %> - - \ No newline at end of file diff --git a/Chapter07/implementing-authentication/hapi-authentication/views/login.ejs b/Chapter07/implementing-authentication/hapi-authentication/views/login.ejs deleted file mode 100644 index 3adbd80..0000000 --- a/Chapter07/implementing-authentication/hapi-authentication/views/login.ejs +++ /dev/null @@ -1,17 +0,0 @@ - - - Login - - - -

Login

- <% if (fail) { %> -

Try Again

- <% } %> -
- User:
- Pass:
- -
- - \ No newline at end of file diff --git a/Chapter07/implementing-authentication/koa-authentication/index.js b/Chapter07/implementing-authentication/koa-authentication/index.js deleted file mode 100644 index 3ef5e03..0000000 --- a/Chapter07/implementing-authentication/koa-authentication/index.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict' - -const {join} = require('path') -const Koa = require('koa') -const serve = require('koa-static') -const views = require('koa-views') -const router = require('koa-router')() -const bodyParser = require('koa-bodyparser') -const session = require('koa-generic-session') -const pino = require('pino')() -const logger = require('koa-pino-logger')({ - instance: pino -}) -const index = require('./routes/index') -const auth = require('./routes/auth') - -const app = new Koa() -const dev = process.env.NODE_ENV !== 'production' -const port = process.env.PORT || 3000 - -app.keys = ['koa has integrated secret management'] - -app.use(views(join(__dirname, 'views'), { - extension: 'ejs' -})) - -app.use(logger) -app.use(session()) -app.use(bodyParser()) - - -if (dev) { - app.use(serve(join(__dirname, 'public'))) -} - -router.use('/', index.routes()) -router.use('/auth', auth.routes()) - -app.use(router.routes()) - -app.listen(port, () => { - pino.info(`Server listening on port ${port}`) -}) \ No newline at end of file diff --git a/Chapter07/implementing-authentication/koa-authentication/package.json b/Chapter07/implementing-authentication/koa-authentication/package.json deleted file mode 100644 index e341bf8..0000000 --- a/Chapter07/implementing-authentication/koa-authentication/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "ejs": "^2.5.6", - "koa": "^2.2.0", - "koa-bodyparser": "^4.2.0", - "koa-generic-session": "^1.11.5", - "koa-pino-logger": "^2.1.0", - "koa-router": "^7.1.1", - "koa-static": "^3.0.0", - "koa-views": "^6.0.1", - "pino": "^4.2.4" - } -} diff --git a/Chapter07/implementing-authentication/koa-authentication/public/styles.css b/Chapter07/implementing-authentication/koa-authentication/public/styles.css deleted file mode 100644 index 28e6f72..0000000 --- a/Chapter07/implementing-authentication/koa-authentication/public/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} \ No newline at end of file diff --git a/Chapter07/implementing-authentication/koa-authentication/routes/auth.js b/Chapter07/implementing-authentication/koa-authentication/routes/auth.js deleted file mode 100644 index be7d8a2..0000000 --- a/Chapter07/implementing-authentication/koa-authentication/routes/auth.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict' - -const router = require('koa-router')() - -router.get('/login', async (ctx) => { - await ctx.render('login', {fail: false}) -}) - -router.post('/login', async (ctx) => { - const { session, request } = ctx - const { body } = request - if (session.user) { - ctx.redirect('/') - return - } - if (body.un === 'dave' && body.pw === 'ncb') { - session.user = {name: body.un} - ctx.redirect('/') - return - } - - await ctx.render('login', {fail: true}) -}) - -router.get('/logout', async (ctx, next) => { - ctx.session.user = null - ctx.redirect('/') -}) - -module.exports = router \ No newline at end of file diff --git a/Chapter07/implementing-authentication/koa-authentication/routes/index.js b/Chapter07/implementing-authentication/koa-authentication/routes/index.js deleted file mode 100644 index 5edb7c5..0000000 --- a/Chapter07/implementing-authentication/koa-authentication/routes/index.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict' - -const router = require('koa-router')() - -router.get('/', async function (ctx) { - const title = 'Koa' - ctx.log.info(`rendering index view with ${title}`) - const user = ctx.session.user - await ctx.render('index', {title, user}) -}) - -module.exports = router - diff --git a/Chapter07/implementing-authentication/koa-authentication/views/index.ejs b/Chapter07/implementing-authentication/koa-authentication/views/index.ejs deleted file mode 100644 index 6d52625..0000000 --- a/Chapter07/implementing-authentication/koa-authentication/views/index.ejs +++ /dev/null @@ -1,16 +0,0 @@ - - - <%= title %> - - - -

<%= title %>

-

Welcome to <%= title %>

- <% if (user) { %> -

Hi <%= user.name %>!

-

Logout

- <% } else { %> -

Login

- <% } %> - - \ No newline at end of file diff --git a/Chapter07/implementing-authentication/koa-authentication/views/login.ejs b/Chapter07/implementing-authentication/koa-authentication/views/login.ejs deleted file mode 100644 index 3adbd80..0000000 --- a/Chapter07/implementing-authentication/koa-authentication/views/login.ejs +++ /dev/null @@ -1,17 +0,0 @@ - - - Login - - - -

Login

- <% if (fail) { %> -

Try Again

- <% } %> -
- User:
- Pass:
- -
- - \ No newline at end of file diff --git a/Chapter07/leveldb-app/package-lock.json b/Chapter07/leveldb-app/package-lock.json new file mode 100644 index 0000000..9d07e05 --- /dev/null +++ b/Chapter07/leveldb-app/package-lock.json @@ -0,0 +1,216 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + } + }, + "encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "requires": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + } + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "~1.0.1" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "level": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", + "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", + "requires": { + "level-js": "^5.0.0", + "level-packager": "^5.1.0", + "leveldown": "^5.4.0" + } + }, + "level-codec": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.1.tgz", + "integrity": "sha512-ajFP0kJ+nyq4i6kptSM+mAvJKLOg1X5FiFPtLG9M5gCEZyBmgDi3FkDrvlMkEzrUn1cWxtvVmrvoS4ASyO/q+Q==" + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==" + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + } + }, + "level-js": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", + "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", + "requires": { + "abstract-leveldown": "~6.2.3", + "buffer": "^5.5.0", + "inherits": "^2.0.3", + "ltgt": "^2.1.2" + } + }, + "level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "requires": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "requires": { + "xtend": "^4.0.2" + } + }, + "leveldown": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", + "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", + "requires": { + "abstract-leveldown": "~6.2.1", + "napi-macros": "~2.0.0", + "node-gyp-build": "~4.1.0" + } + }, + "levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "requires": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" + }, + "napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" + }, + "node-gyp-build": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", + "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==" + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } +} diff --git a/Chapter07/adding-logging/express-logging/package.json b/Chapter07/leveldb-app/package.json similarity index 51% rename from Chapter07/adding-logging/express-logging/package.json rename to Chapter07/leveldb-app/package.json index cd17c71..2791a60 100644 --- a/Chapter07/adding-logging/express-logging/package.json +++ b/Chapter07/leveldb-app/package.json @@ -1,18 +1,18 @@ { - "name": "app", + "name": "leveldb-app", "version": "1.0.0", "description": "", - "main": "index.js", + "main": "tasks.js", + "dependencies": { + "level": "^6.0.1", + "leveldown": "^5.6.0", + "levelup": "^4.4.0" + }, + "devDependencies": {}, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", - "license": "ISC", - "dependencies": { - "ejs": "^2.5.6", - "express": "^4.15.2", - "express-pino-logger": "^2.0.0", - "pino": "^4.2.4" - } + "license": "ISC" } diff --git a/Chapter07/leveldb-app/tasks.js b/Chapter07/leveldb-app/tasks.js new file mode 100644 index 0000000..eaa6db4 --- /dev/null +++ b/Chapter07/leveldb-app/tasks.js @@ -0,0 +1,26 @@ +const levelup = require('levelup') +const leveldown = require('leveldown') + +const db = levelup(leveldown('./data')) + +const task = process.argv[2] + +if (!task) { + listTasks() +} else { + addTask() +} + +function addTask() { + const key = `Task: ${Math.random().toString(32).replace('.', '')}` + db.put(key, task, (err) => { + if (err) throw err + listTasks() + }) +} + +function listTasks() { + db.createReadStream().on('data', (data) => { + console.log(data.key.toString(), '=', data.value.toString()) + }) +} \ No newline at end of file diff --git a/Chapter07/leveldb-filter/filter.js b/Chapter07/leveldb-filter/filter.js new file mode 100644 index 0000000..eed5950 --- /dev/null +++ b/Chapter07/leveldb-filter/filter.js @@ -0,0 +1,25 @@ +const levelup = require('levelup') +const leveldown = require('leveldown') +const db = levelup(leveldown('./data')) + +db.put('Task:1', '') +db.put('Task:2', '') +db.put('Task:3', '') +db.put('Task:4', '') + +db.createReadStream({ + gte: 'Task:1', + lte: 'Task:3' +}).on('data', function (data) { + console.log(data.key.toString()) +}) + + + + + +db.batch() + .put('forename', 'Beth') + .put('surname', 'Griggs') + .del('forename') + .write(() => console.log('Batch operations complete.')) \ No newline at end of file diff --git a/Chapter07/leveldb-filter/package-lock.json b/Chapter07/leveldb-filter/package-lock.json new file mode 100644 index 0000000..fba6295 --- /dev/null +++ b/Chapter07/leveldb-filter/package-lock.json @@ -0,0 +1,167 @@ +{ + "name": "leveldb-filter", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + } + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "~1.0.1" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==" + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "requires": { + "xtend": "^4.0.2" + } + }, + "leveldown": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", + "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", + "requires": { + "abstract-leveldown": "~6.2.1", + "napi-macros": "~2.0.0", + "node-gyp-build": "~4.1.0" + } + }, + "levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "requires": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" + }, + "node-gyp-build": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", + "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==" + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } +} diff --git a/Chapter07/adding-a-view-layer/express-views/package.json b/Chapter07/leveldb-filter/package.json similarity index 66% rename from Chapter07/adding-a-view-layer/express-views/package.json rename to Chapter07/leveldb-filter/package.json index fa7f4f9..4922bac 100644 --- a/Chapter07/adding-a-view-layer/express-views/package.json +++ b/Chapter07/leveldb-filter/package.json @@ -1,8 +1,8 @@ { - "name": "app", + "name": "leveldb-filter", "version": "1.0.0", "description": "", - "main": "index.js", + "main": "filter.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, @@ -10,7 +10,7 @@ "author": "", "license": "ISC", "dependencies": { - "ejs": "^2.5.6", - "express": "^4.15.2" + "leveldown": "^5.6.0", + "levelup": "^4.4.0" } } diff --git a/Chapter07/leveldb-memdown-app/package-lock.json b/Chapter07/leveldb-memdown-app/package-lock.json new file mode 100644 index 0000000..c07c6f6 --- /dev/null +++ b/Chapter07/leveldb-memdown-app/package-lock.json @@ -0,0 +1,236 @@ +{ + "name": "leveldb-app", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + } + }, + "encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "requires": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + } + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "~1.0.1" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "level": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", + "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", + "requires": { + "level-js": "^5.0.0", + "level-packager": "^5.1.0", + "leveldown": "^5.4.0" + } + }, + "level-codec": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.1.tgz", + "integrity": "sha512-ajFP0kJ+nyq4i6kptSM+mAvJKLOg1X5FiFPtLG9M5gCEZyBmgDi3FkDrvlMkEzrUn1cWxtvVmrvoS4ASyO/q+Q==" + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==" + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + } + }, + "level-js": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", + "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", + "requires": { + "abstract-leveldown": "~6.2.3", + "buffer": "^5.5.0", + "inherits": "^2.0.3", + "ltgt": "^2.1.2" + } + }, + "level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "requires": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "requires": { + "xtend": "^4.0.2" + } + }, + "leveldown": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", + "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", + "requires": { + "abstract-leveldown": "~6.2.1", + "napi-macros": "~2.0.0", + "node-gyp-build": "~4.1.0" + } + }, + "levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "requires": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" + }, + "memdown": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", + "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", + "requires": { + "abstract-leveldown": "~6.2.1", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.2.0" + } + }, + "napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" + }, + "node-gyp-build": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", + "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==" + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } +} diff --git a/Chapter07/adding-a-view-layer/hapi-views/package.json b/Chapter07/leveldb-memdown-app/package.json similarity index 51% rename from Chapter07/adding-a-view-layer/hapi-views/package.json rename to Chapter07/leveldb-memdown-app/package.json index 2af54dc..e8bd990 100644 --- a/Chapter07/adding-a-view-layer/hapi-views/package.json +++ b/Chapter07/leveldb-memdown-app/package.json @@ -1,18 +1,18 @@ { - "name": "app", + "name": "leveldb-app", "version": "1.0.0", "description": "", - "main": "index.js", + "main": "tasks.js", + "dependencies": { + "level": "^6.0.1", + "levelup": "^4.4.0", + "memdown": "^5.1.0" + }, + "devDependencies": {}, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", - "license": "ISC", - "dependencies": { - "ejs": "^2.5.6", - "hapi": "^16.1.1", - "inert": "^4.2.0", - "vision": "^4.1.1" - } + "license": "ISC" } diff --git a/Chapter07/leveldb-memdown-app/tasks.js b/Chapter07/leveldb-memdown-app/tasks.js new file mode 100644 index 0000000..eaa6db4 --- /dev/null +++ b/Chapter07/leveldb-memdown-app/tasks.js @@ -0,0 +1,26 @@ +const levelup = require('levelup') +const leveldown = require('leveldown') + +const db = levelup(leveldown('./data')) + +const task = process.argv[2] + +if (!task) { + listTasks() +} else { + addTask() +} + +function addTask() { + const key = `Task: ${Math.random().toString(32).replace('.', '')}` + db.put(key, task, (err) => { + if (err) throw err + listTasks() + }) +} + +function listTasks() { + db.createReadStream().on('data', (data) => { + console.log(data.key.toString(), '=', data.value.toString()) + }) +} \ No newline at end of file diff --git a/Chapter07/leveldb-sql-app/tasks.js b/Chapter07/leveldb-sql-app/tasks.js new file mode 100644 index 0000000..2d41156 --- /dev/null +++ b/Chapter07/leveldb-sql-app/tasks.js @@ -0,0 +1,26 @@ +const levelup = require('levelup') +const memdown = require('memdown') + +const db = levelup(memdown('./data')) + +const task = process.argv[2] + +if (!task) { + listTasks() +} else { + addTask() +} + +function addTask() { + const key = `Task: ${Math.random().toString(32).replace('.', '')}` + db.put(key, task, (err) => { + if (err) throw err + listTasks() + }) +} + +function listTasks() { + db.createReadStream().on('data', (data) => { + console.log(data.key.toString(), '=', data.value.toString()) + }) +} \ No newline at end of file diff --git a/Chapter07/mongodb-app/package-lock.json b/Chapter07/mongodb-app/package-lock.json new file mode 100644 index 0000000..7be8dce --- /dev/null +++ b/Chapter07/mongodb-app/package-lock.json @@ -0,0 +1,149 @@ +{ + "name": "mongodb-app", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "bl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz", + "integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "bson": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.4.tgz", + "integrity": "sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "denque": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", + "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "mongodb": { + "version": "3.5.7", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.7.tgz", + "integrity": "sha512-lMtleRT+vIgY/JhhTn1nyGwnSMmJkJELp+4ZbrjctrnBxuLbj6rmLuJFz8W2xUzUqWmqoyVxJLYuC58ZKpcTYQ==", + "requires": { + "bl": "^2.2.0", + "bson": "^1.1.4", + "denque": "^1.4.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + } + } +} diff --git a/Chapter07/adding-a-view-layer/express-template-strings/package.json b/Chapter07/mongodb-app/package.json similarity index 74% rename from Chapter07/adding-a-view-layer/express-template-strings/package.json rename to Chapter07/mongodb-app/package.json index 8711bc5..f66a4f1 100644 --- a/Chapter07/adding-a-view-layer/express-template-strings/package.json +++ b/Chapter07/mongodb-app/package.json @@ -1,8 +1,8 @@ { - "name": "app", + "name": "mongodb-app", "version": "1.0.0", "description": "", - "main": "index.js", + "main": "tasks.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, @@ -10,6 +10,6 @@ "author": "", "license": "ISC", "dependencies": { - "express": "^4.15.2" + "mongodb": "^3.5.7" } } diff --git a/Chapter07/mongodb-app/tasks.js b/Chapter07/mongodb-app/tasks.js new file mode 100644 index 0000000..8314493 --- /dev/null +++ b/Chapter07/mongodb-app/tasks.js @@ -0,0 +1,42 @@ +const { + MongoClient +} = require('mongodb') +const task = process.argv[2] + +const URI = 'mongodb://localhost:27017/' + +MongoClient.connect(URI, { + useUnifiedTopology: true +}, connected) + +function connected(err, client) { + if (err) throw err + const tasks = client.db('tasklist').collection('tasks') + + if (task) { + addTask(client, tasks) + } else { + listTasks(client, tasks) + } +} + +function addTask(client, tasks) { + tasks.insertOne({ + task: task + }, (err) => { + if (err) throw err + console.log("New Task: ", task); + listTasks(client, tasks) + }) +} + +function listTasks(client, tasks) { + tasks.find().each((err, doc) => { + if (err) throw err + if (!doc) { + client.close() + return + } + console.log(doc) + }) +} \ No newline at end of file diff --git a/Chapter07/mongoose-app/package-lock.json b/Chapter07/mongoose-app/package-lock.json new file mode 100644 index 0000000..d52e503 --- /dev/null +++ b/Chapter07/mongoose-app/package-lock.json @@ -0,0 +1,218 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "bl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz", + "integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "bson": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.4.tgz", + "integrity": "sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "denque": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", + "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "kareem": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", + "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" + }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "mongodb": { + "version": "3.5.7", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.7.tgz", + "integrity": "sha512-lMtleRT+vIgY/JhhTn1nyGwnSMmJkJELp+4ZbrjctrnBxuLbj6rmLuJFz8W2xUzUqWmqoyVxJLYuC58ZKpcTYQ==", + "requires": { + "bl": "^2.2.0", + "bson": "^1.1.4", + "denque": "^1.4.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "mongoose": { + "version": "5.9.12", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.9.12.tgz", + "integrity": "sha512-bP01WSvh64yuHJ7XsGRwj/91j1V3iE3PcvYI6fAhMmNU9SBMHoMf/jy7hZm275zfocFiyTV9MfKLWrXh7VK9ig==", + "requires": { + "bson": "^1.1.4", + "kareem": "2.3.1", + "mongodb": "3.5.7", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.7.0", + "mquery": "3.2.2", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "safe-buffer": "5.1.2", + "sift": "7.0.1", + "sliced": "1.0.1" + } + }, + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + }, + "mpath": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.7.0.tgz", + "integrity": "sha512-Aiq04hILxhz1L+f7sjGyn7IxYzWm1zLNNXcfhDtx04kZ2Gk7uvFdgZ8ts1cWa/6d0TQmag2yR8zSGZUmp0tFNg==" + }, + "mquery": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.2.tgz", + "integrity": "sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==", + "requires": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "sift": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", + "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" + }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + } + } +} diff --git a/Chapter07/mongoose-app/tasks.js b/Chapter07/mongoose-app/tasks.js new file mode 100644 index 0000000..80b7579 --- /dev/null +++ b/Chapter07/mongoose-app/tasks.js @@ -0,0 +1,23 @@ +const mongoose = require('mongoose'); + +const URI = 'mongodb://localhost:27017/customers' + + +mongoose.connect(URI, { + useNewUrlParser: true, + useUnifiedTopology: true +}) + +const Customer = mongoose.model('Customer', { + forename: String, + surname: String +}) + +const customer_1 = new Customer({ + forename: 'Beth', + surname: 'Griggs' +}) + +customer_1.save().then((doc) => { + console.log('Added new customer', doc.forename, doc.surname) +}) \ No newline at end of file diff --git a/Chapter07/mysql-app/.env b/Chapter07/mysql-app/.env new file mode 100644 index 0000000..adbeb40 --- /dev/null +++ b/Chapter07/mysql-app/.env @@ -0,0 +1,2 @@ +DB_MYSQL_USER=root +DB_MYSQL_PASSWORD=PASSWORD \ No newline at end of file diff --git a/Chapter07/mysql-app/index.js b/Chapter07/mysql-app/index.js new file mode 100644 index 0000000..0b0e84a --- /dev/null +++ b/Chapter07/mysql-app/index.js @@ -0,0 +1,38 @@ +require('dotenv').config() +const mysql = require('mysql') + +const db = mysql.createConnection({ + user: process.env.DB_MYSQL_USER, + password: process.env.DB_MYSQL_PASSWORD +}) + +db.query('CREATE DATABASE tasks') +db.query('USE tasks') + +db.query( + 'CREATE TABLE tasks.tasks (' + + 'id INT NOT NULL AUTO_INCREMENT, ' + + 'task TEXT NOT NULL, PRIMARY KEY ( id )' + + ')') + +const ignore = new Set([ + 'ER_DB_CREATE_EXISTS', 'ER_TABLE_EXISTS_ERROR' +]) + +db.on('error', (err) => { + if (ignore.has(err.code)) return + throw err +}) + +db.query(` +INSERT INTO tasks.tasks (task) +VALUES ("Walk the dog"); +`) + +db.query(` +SELECT * FROM tasks.tasks; +`, (err, results) => { + console.log(results) +}) + +db.end() \ No newline at end of file diff --git a/Chapter07/mysql-app/insert.js b/Chapter07/mysql-app/insert.js new file mode 100644 index 0000000..435ad7f --- /dev/null +++ b/Chapter07/mysql-app/insert.js @@ -0,0 +1,40 @@ +require('dotenv').config() +const mysql = require('mysql') + +const db = mysql.createConnection({ + user: process.env.DB_MYSQL_USER, + password: process.env.DB_MYSQL_PASSWORD +}) + +db.query('CREATE DATABASE tasks') +db.query('USE tasks') + +db.query( + 'CREATE TABLE tasks.tasks (' + + 'id INT NOT NULL AUTO_INCREMENT, ' + + 'task TEXT NOT NULL, PRIMARY KEY ( id )' + + ')') + +const ignore = new Set([ + 'ER_DB_CREATE_EXISTS', 'ER_TABLE_EXISTS_ERROR' +]) + +db.on('error', (err) => { + if (ignore.has(err.code)) return + throw err +}) + +if (process.argv[2]) { + db.query(` + INSERT INTO tasks.tasks (task) + VALUES (?); + `, [process.argv[2]]) +} + +db.query(` +SELECT * FROM tasks.tasks; +`, (err, results, fields) => { + console.log(results) +}) + +db.end() \ No newline at end of file diff --git a/Chapter07/mysql-app/package-lock.json b/Chapter07/mysql-app/package-lock.json new file mode 100644 index 0000000..80cf9aa --- /dev/null +++ b/Chapter07/mysql-app/package-lock.json @@ -0,0 +1,86 @@ +{ + "name": "mysql-app", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "mysql": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", + "requires": { + "bignumber.js": "9.0.0", + "readable-stream": "2.3.7", + "safe-buffer": "5.1.2", + "sqlstring": "2.3.1" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + } + } +} diff --git a/Chapter07/creating-a-hapi-web-app/app/package.json b/Chapter07/mysql-app/package.json similarity index 76% rename from Chapter07/creating-a-hapi-web-app/app/package.json rename to Chapter07/mysql-app/package.json index 68f1cb3..a609baa 100644 --- a/Chapter07/creating-a-hapi-web-app/app/package.json +++ b/Chapter07/mysql-app/package.json @@ -1,5 +1,5 @@ { - "name": "app", + "name": "mysql-app", "version": "1.0.0", "description": "", "main": "index.js", @@ -10,7 +10,7 @@ "author": "", "license": "ISC", "dependencies": { - "hapi": "^16.1.1", - "inert": "^4.2.0" + "dotenv": "^8.2.0", + "mysql": "^2.18.1" } } diff --git a/Chapter07/postgres-app/.env b/Chapter07/postgres-app/.env new file mode 100644 index 0000000..0abe11f --- /dev/null +++ b/Chapter07/postgres-app/.env @@ -0,0 +1,3 @@ +PGUSER=postgres +PGPASSWORD=PASSWORD +PGPORT=5432 \ No newline at end of file diff --git a/Chapter07/postgres-app/package-lock.json b/Chapter07/postgres-app/package-lock.json new file mode 100644 index 0000000..40680cb --- /dev/null +++ b/Chapter07/postgres-app/package-lock.json @@ -0,0 +1,122 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + }, + "packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "pg": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.0.3.tgz", + "integrity": "sha512-fvcNXn4o/iq4jKq15Ix/e58q3jPSmzOp6/8C3CaHoSR/bsxdg+1FXfDRePdtE/zBb3++TytvOrS1hNef3WC/Kg==", + "requires": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "0.1.3", + "pg-pool": "^3.1.1", + "pg-protocol": "^1.2.2", + "pg-types": "^2.1.0", + "pgpass": "1.x", + "semver": "4.3.2" + } + }, + "pg-connection-string": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", + "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=" + }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-pool": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.1.1.tgz", + "integrity": "sha512-kYH6S0mcZF1TPg1F9boFee2JlCSm2oqnlR2Mz2Wgn1psQbEBNVeNTJCw2wCK48QsctwvGUzbxLMg/lYV6hL/3A==" + }, + "pg-protocol": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.2.2.tgz", + "integrity": "sha512-r8hGxHOk3ccMjjmhFJ/QOSVW5A+PP84TeRlEwB/cQ9Zu+bvtZg8Z59Cx3AMfVQc9S0Z+EG+HKhicF1W1GN5Eqg==" + }, + "pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + } + }, + "pgpass": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", + "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", + "requires": { + "split": "^1.0.0" + } + }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" + }, + "postgres-date": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.5.tgz", + "integrity": "sha512-pdau6GRPERdAYUQwkBnGKxEfPyhVZXG/JiS44iZWiNdSOWE09N2lUgN6yshuq6fVSon4Pm0VMXd1srUUkLe9iA==" + }, + "postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "requires": { + "xtend": "^4.0.0" + } + }, + "semver": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", + "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "requires": { + "through": "2" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } +} diff --git a/Chapter07/postgres-app/tasks.js b/Chapter07/postgres-app/tasks.js new file mode 100644 index 0000000..b750f34 --- /dev/null +++ b/Chapter07/postgres-app/tasks.js @@ -0,0 +1,32 @@ +require('dotenv').config() +const pg = require('pg') +const db = new pg.Client() +const task = process.argv[2] + +const CREATE_TABLE_SQL = `CREATE TABLE IF NOT EXISTS tasks + (id SERIAL, task TEXT NOT NULL, PRIMARY KEY ( id ))` +const INSERT_TASK_SQL = `INSERT INTO tasks (task) VALUES ($1);` +const GET_TASKS_SQL = `SELECT * FROM tasks;` + +db.connect((err) => { + if (err) throw err + db.query(CREATE_TABLE_SQL, (err) => { + if (err) throw err + if (task) { + db.query(INSERT_TASK_SQL, [task], (err) => { + if (err) throw err + listTasks() + }) + } else { + listTasks() + } + }) +}) + +function listTasks() { + db.query(GET_TASKS_SQL, (err, results) => { + if (err) throw err + console.log(results.rows); + db.end() + }) +} \ No newline at end of file diff --git a/Chapter07/postgres-object-app/.env b/Chapter07/postgres-object-app/.env new file mode 100644 index 0000000..0abe11f --- /dev/null +++ b/Chapter07/postgres-object-app/.env @@ -0,0 +1,3 @@ +PGUSER=postgres +PGPASSWORD=PASSWORD +PGPORT=5432 \ No newline at end of file diff --git a/Chapter07/postgres-object-app/package-lock.json b/Chapter07/postgres-object-app/package-lock.json new file mode 100644 index 0000000..40680cb --- /dev/null +++ b/Chapter07/postgres-object-app/package-lock.json @@ -0,0 +1,122 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + }, + "packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "pg": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.0.3.tgz", + "integrity": "sha512-fvcNXn4o/iq4jKq15Ix/e58q3jPSmzOp6/8C3CaHoSR/bsxdg+1FXfDRePdtE/zBb3++TytvOrS1hNef3WC/Kg==", + "requires": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "0.1.3", + "pg-pool": "^3.1.1", + "pg-protocol": "^1.2.2", + "pg-types": "^2.1.0", + "pgpass": "1.x", + "semver": "4.3.2" + } + }, + "pg-connection-string": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", + "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=" + }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-pool": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.1.1.tgz", + "integrity": "sha512-kYH6S0mcZF1TPg1F9boFee2JlCSm2oqnlR2Mz2Wgn1psQbEBNVeNTJCw2wCK48QsctwvGUzbxLMg/lYV6hL/3A==" + }, + "pg-protocol": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.2.2.tgz", + "integrity": "sha512-r8hGxHOk3ccMjjmhFJ/QOSVW5A+PP84TeRlEwB/cQ9Zu+bvtZg8Z59Cx3AMfVQc9S0Z+EG+HKhicF1W1GN5Eqg==" + }, + "pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + } + }, + "pgpass": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", + "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", + "requires": { + "split": "^1.0.0" + } + }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" + }, + "postgres-date": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.5.tgz", + "integrity": "sha512-pdau6GRPERdAYUQwkBnGKxEfPyhVZXG/JiS44iZWiNdSOWE09N2lUgN6yshuq6fVSon4Pm0VMXd1srUUkLe9iA==" + }, + "postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "requires": { + "xtend": "^4.0.0" + } + }, + "semver": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", + "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "requires": { + "through": "2" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } +} diff --git a/Chapter07/postgres-object-app/tasks.js b/Chapter07/postgres-object-app/tasks.js new file mode 100644 index 0000000..c09e937 --- /dev/null +++ b/Chapter07/postgres-object-app/tasks.js @@ -0,0 +1,32 @@ +require('dotenv').config() +const pg = require('pg') +const db = new pg.Client() +const task = process.argv[2] + +const CREATE_TABLE_SQL = `CREATE TABLE IF NOT EXISTS task_docs + (id SERIAL, doc jsonb);` +const INSERT_TASK_SQL = `INSERT INTO task_docs (doc) VALUES ($1);` +const GET_TASKS_SQL = `SELECT * FROM task_docs;` + +db.connect((err) => { + if (err) throw err + db.query(CREATE_TABLE_SQL, (err) => { + if (err) throw err + if (task) { + db.query(INSERT_TASK_SQL, [task], (err) => { + if (err) throw err + listTasks() + }) + } else { + listTasks() + } + }) +}) + +function listTasks() { + db.query(GET_TASKS_SQL, (err, results) => { + if (err) throw err + console.log(results.rows); + db.end() + }) +} \ No newline at end of file diff --git a/Chapter07/redis-app/package-lock.json b/Chapter07/redis-app/package-lock.json new file mode 100644 index 0000000..e271e5c --- /dev/null +++ b/Chapter07/redis-app/package-lock.json @@ -0,0 +1,42 @@ +{ + "name": "redis-app", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "denque": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", + "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" + }, + "redis": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/redis/-/redis-3.0.2.tgz", + "integrity": "sha512-PNhLCrjU6vKVuMOyFu7oSP296mwBkcE6lrAjruBYG5LgdSqtRBoVQIylrMyVZD/lkF24RSNNatzvYag6HRBHjQ==", + "requires": { + "denque": "^1.4.1", + "redis-commands": "^1.5.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0" + } + }, + "redis-commands": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.5.0.tgz", + "integrity": "sha512-6KxamqpZ468MeQC3bkWmCB1fp56XL64D4Kf0zJSwDZbVLLm7KFkoIcHrgRvQ+sk8dnhySs7+yBg94yIkAK7aJg==" + }, + "redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=" + }, + "redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=", + "requires": { + "redis-errors": "^1.0.0" + } + } + } +} diff --git a/Chapter07/creating-an-express-web-app/app/package.json b/Chapter07/redis-app/package.json similarity index 83% rename from Chapter07/creating-an-express-web-app/app/package.json rename to Chapter07/redis-app/package.json index 8711bc5..cc9aeed 100644 --- a/Chapter07/creating-an-express-web-app/app/package.json +++ b/Chapter07/redis-app/package.json @@ -1,5 +1,5 @@ { - "name": "app", + "name": "redis-app", "version": "1.0.0", "description": "", "main": "index.js", @@ -10,6 +10,6 @@ "author": "", "license": "ISC", "dependencies": { - "express": "^4.15.2" + "redis": "^3.0.2" } } diff --git a/Chapter07/redis-app/tasks-auth.js b/Chapter07/redis-app/tasks-auth.js new file mode 100644 index 0000000..f5efac8 --- /dev/null +++ b/Chapter07/redis-app/tasks-auth.js @@ -0,0 +1,37 @@ +const redis = require('redis') +const client = redis.createClient({ + port: 6380, + password: "PASSWORD" +}) +const task = process.argv[2] + +client.on('error', (err) => { + console.log("Error:", err) +}) + +if (!task) { + listTasks() +} else { + addTask(task) +} + +function addTask(task) { + const key = `Task: ${Math.random().toString(32).replace('.', '')}` + client.hmset(key, { + task + }) + listTasks() +} + +function listTasks() { + client.keys('Task:*', (err, keys) => { + if (err) throw err + keys.forEach(key => { + client.hgetall(key, (err, task) => { + if (err) throw err + console.log(task) + }) + }) + client.quit() + }) +} \ No newline at end of file diff --git a/Chapter07/redis-app/tasks.js b/Chapter07/redis-app/tasks.js new file mode 100644 index 0000000..6489729 --- /dev/null +++ b/Chapter07/redis-app/tasks.js @@ -0,0 +1,34 @@ +const redis = require('redis') +const client = redis.createClient() +const task = process.argv[2] + +client.on('error', (err) => { + console.log("Error:", err) +}) + +if (!task) { + listTasks() +} else { + addTask(task) +} + +function addTask(task) { + const key = `Task: ${Math.random().toString(32).replace('.', '')}` + client.hmset(key, { + task + }) + listTasks() +} + +function listTasks() { + client.keys('Task:*', (err, keys) => { + if (err) throw err + keys.forEach(key => { + client.hgetall(key, (err, task) => { + if (err) throw err + console.log(task) + }) + }) + client.quit() + }) +} \ No newline at end of file