Chapter 7: initial samples

This commit is contained in:
Beth Griggs 2020-05-16 14:33:26 +01:00
parent bcf782f7dc
commit adb2130b38
No known key found for this signature in database
GPG Key ID: D7062848A1AB005C
140 changed files with 1777 additions and 1960 deletions

View File

@ -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}`)
})

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -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

View File

@ -1,14 +0,0 @@
'use strict'
module.exports = function indexView ({title}) {
return `<html>
<head>
<title> ${title} </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> ${title} </h1>
<p> Welcome to ${title} </p>
</body>
</html>`
}

View File

@ -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}`)
})

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -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

View File

@ -1,10 +0,0 @@
<html>
<head>
<title> <%= title %> </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> <%= title %> </h1>
<p> Welcome to <%= title %> </p>
</body>
</html>

View File

@ -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}`)
})
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -1,15 +0,0 @@
'use strict'
module.exports = devStatic
function devStatic (server) {
server.route({
method: 'GET',
path: '/{param*}',
handler: {
directory: {
path: 'public'
}
}
})
}

View File

@ -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})
}
})
}

View File

@ -1,10 +0,0 @@
<html>
<head>
<title> <%= title %> </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> <%= title %> </h1>
<p> Welcome to <%= title %> </p>
</body>
</html>

View File

@ -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}`)
})

View File

@ -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"
}
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -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

View File

@ -1,10 +0,0 @@
<html>
<head>
<title> <%= title %> </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> <%= title %> </h1>
<p> Welcome to <%= title %> </p>
</body>
</html>

View File

@ -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}`)
})

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -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

View File

@ -1,10 +0,0 @@
<html>
<head>
<title> <%= title %> </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> <%= title %> </h1>
<p> Welcome to <%= title %> </p>
</body>
</html>

View File

@ -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}`)
})

View File

@ -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"
}
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -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

View File

@ -1,10 +0,0 @@
<html>
<head>
<title> <%= title %> </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> <%= title %> </h1>
<p> Welcome to <%= title %> </p>
</body>
</html>

View File

@ -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}`)
})

View File

@ -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"
}
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -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

View File

@ -1,10 +0,0 @@
<html>
<head>
<title> <%= title %> </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> <%= title %> </h1>
<p> Welcome to <%= title %> </p>
</body>
</html>

View File

@ -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}`)
})

View File

@ -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"
}
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -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

View File

@ -1,10 +0,0 @@
<html>
<head>
<title> <%= title %> </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> <%= title %> </h1>
<p> Welcome to <%= title %> </p>
</body>
</html>

View File

@ -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}`)
})
}

View File

@ -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"
}
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -1,15 +0,0 @@
'use strict'
module.exports = devStatic
function devStatic (server) {
server.route({
method: 'GET',
path: '/{param*}',
handler: {
directory: {
path: 'public'
}
}
})
}

View File

@ -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})
}
})
}

View File

@ -1,10 +0,0 @@
<html>
<head>
<title> <%= title %> </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> <%= title %> </h1>
<p> Welcome to <%= title %> </p>
</body>
</html>

View File

@ -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}`)
})

View File

@ -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"
}
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -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

View File

@ -1,10 +0,0 @@
<html>
<head>
<title> <%= title %> </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> <%= title %> </h1>
<p> Welcome to <%= title %> </p>
</body>
</html>

View File

@ -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}`)
})
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -1,15 +0,0 @@
'use strict'
module.exports = devStatic
function devStatic (server) {
server.route({
method: 'GET',
path: '/{param*}',
handler: {
directory: {
path: 'public'
}
}
})
}

View File

@ -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(`
<html>
<head>
<title> ${title} </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> ${title} </h1>
<p> Welcome to ${title} </p>
</body>
</html>
`)
}
})
}

View File

@ -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}`)
})
}

View File

@ -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"
}
}

View File

@ -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'}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -1,15 +0,0 @@
'use strict'
module.exports = devStatic
function devStatic (server) {
server.route({
method: 'GET',
path: '/{param*}',
handler: {
directory: {
path: 'public'
}
}
})
}

View File

@ -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(`
<html>
<head>
<title> ${title} </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> ${title} </h1>
<p> Welcome to ${title} </p>
</body>
</html>
`)
}
})
}

View File

@ -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}`)
})
}

View File

@ -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"
}
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -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'
}
}
})
}

View File

@ -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(`
<html>
<head>
<title> ${title} </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> ${title} </h1>
<p> Welcome to ${title} </p>
</body>
</html>
`)
}
})
}

View File

@ -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}`)
})

View File

@ -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"
}
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -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 = `
<html>
<head>
<title> ${title} </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> ${title} </h1>
<p> Welcome to ${title} </p>
</body>
</html>
`
}, async (ctx) => ctx.state = {title: 'Koa'})
module.exports = router

View File

@ -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}`)
})

View File

@ -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"
}
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -1,25 +0,0 @@
'use strict'
const router = require('koa-router')()
router.get('/', async function (ctx, next) {
const title = await pretendDbLookup('title')
ctx.body = `
<html>
<head>
<title> ${title} </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> ${title} </h1>
<p> Welcome to ${title} </p>
</body>
</html>
`
})
function pretendDbLookup () {
return Promise.resolve('Koa')
}
module.exports = router

View File

@ -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}`)
})

View File

@ -1,10 +0,0 @@
'use strict'
module.exports = answer
function answer () {
return async (ctx, next) => {
ctx.set('X-Answer', 42)
await next()
}
}

View File

@ -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"
}
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -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 = `
<html>
<head>
<title> ${title} </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> ${title} </h1>
<p> Welcome to ${title} </p>
</body>
</html>
`
}, async (ctx) => ctx.state = {title: 'Koa'})
module.exports = router

View File

@ -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}`)
})

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -1,22 +0,0 @@
'use strict'
const {Router} = require('express')
const router = Router()
router.get('/', function (req, res) {
const title = 'Express'
res.send(`
<html>
<head>
<title> ${title} </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> ${title} </h1>
<p> Welcome to ${title} </p>
</body>
</html>
`)
})
module.exports = router

View File

@ -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}`)
})

View File

@ -1,10 +0,0 @@
'use strict'
module.exports = answer
function answer () {
return (req, res, next) => {
res.setHeader('X-Answer', 42)
next()
}
}

View File

@ -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"
}
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -1,20 +0,0 @@
const {Router} = require('express')
const router = Router()
router.get('/', function(req, res, next) {
const title = 'Express'
res.send(`
<html>
<head>
<title> ${title} </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> ${title} </h1>
<p> Welcome to ${title} </p>
</body>
</html>
`)
})
module.exports = router

View File

@ -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}`)
})

View File

@ -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"
}
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -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(`
<html>
<head>
<title> ${title} </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> ${title} </h1>
<p> Welcome to ${title}${name ? `, ${name}.` : ''} </p>
<form method=POST action=data>
Name: <input name=name> <input type=submit>
</form>
</body>
</html>
`)
})
router.post('/data', function (req, res) {
res.redirect(`/${req.body.name}`)
})
module.exports = router

View File

@ -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}`)
})

View File

@ -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"
}
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -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

View File

@ -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

View File

@ -1,16 +0,0 @@
<html>
<head>
<title> <%= title %> </title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1> <%= title %> </h1>
<p> Welcome to <%= title %> </p>
<% if (user) { %>
<p> Hi <%= user.name %>! </p>
<p> <a href=/auth/logout> Logout </a> </p>
<% } else { %>
<p> <a href=/auth/login> Login </a> </p>
<% } %>
</body>
</html>

View File

@ -1,17 +0,0 @@
<html>
<head>
<title> Login </title>
<link rel="stylesheet" href="../styles.css">
</head>
<body>
<h1> Login </h1>
<% if (fail) { %>
<h2> Try Again </h2>
<% } %>
<form method=post action=login>
User: <input name=un> <br>
Pass: <input type=password name=pw> <br>
<input type=submit value="login">
</form>
</body>
</html>

View File

@ -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}`)
})
}

View File

@ -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"
}
}

View File

@ -1,4 +0,0 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

View File

@ -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('/')
}
})
}

View File

@ -1,15 +0,0 @@
'use strict'
module.exports = devStatic
function devStatic (server) {
server.route({
method: 'GET',
path: '/{param*}',
handler: {
directory: {
path: 'public'
}
}
})
}

Some files were not shown because too many files have changed in this diff Show More