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}.` : ''}
-
-
-
- `)
-})
-
-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
- <% } %>
-
-
-
\ 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
- <% } %>
-
-
-
\ 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
- <% } %>
-
-
-
\ 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