Koa2

安装

yarn add koa

代码

Koa的核心代码就三行

const app = new Koa()
app.use(middleware)
app.listen(3000)
const Koa = require('koa')
const app = new Koa() app.use(async (ctx, next) => {
ctx.body = 'Hello World!'
}) app.listen(8080)

至此一个简单的服务器运行成功。

koa脚手架

npm install -g koa2-generator

koa2 koa-demo

编写一个静态页面

module.exports = `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Koa Server HTMl</title>
<link href="https://cdn.bootcss.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/jquery/3.2.0/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/4.0.0-beta.2/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Hi Susan</h1>
<p>This is a test</p>
</div>
<div class="col-md-4">
<p>测试静态 HTML 页面</p>
</div>
</div>
</div>
</body>
</html> `
const Koa = require('koa')
const app = new Koa() const {normal} = require('./tpl/index') app.use(async(ctx, next) => {
ctx.type = 'text/html;charset=utf-8;'
ctx.body = normal
}) app.listen(8080)

编写模板页面

安装pug模板引擎

yarn add pug

动态模板引擎代码

module.exports = `
doctype html
html
head
meta(charset='utf-8')
meta(name='viewport=', content='width=device-width, initail-scale=1')
title Koa Server Pug
link(href='https://cdn.bootcss.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css',rel='stylesheet')
script(src='https://cdn.bootcss.com/jquery/3.2.0/jquery.min.js')
script(src='https://cdn.bootcss.com/bootstrap/4.0.0-beta.2/js/bootstrap.bundle.min.js')
body
.container
.row
.col-md-8
h1 Hi #{ name }
p This is a test
.col-md-4
p 测试动态PUG模板引擎 `

js代码

const Koa = require('koa')
const app = new Koa() const pug = require('pug') const {pugTpl} = require('./tpl/index') app.use(async(ctx, next) => {
ctx.type = 'text/html;charset=utf-8;'
ctx.body = pug.render(pugTpl, {
name: 'Susan'
})
}) app.listen(8080)

使用模板引擎中间件,支持ejs,pug

koa-views

pug模板引擎代码

doctype html
html
head
meta(charset='utf-8')
meta(name='viewport=', content='width=device-width, initail-scale=1')
title Koa Server Pug
link(href='https://cdn.bootcss.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css',rel='stylesheet')
script(src='https://cdn.bootcss.com/jquery/3.2.0/jquery.min.js')
script(src='https://cdn.bootcss.com/bootstrap/4.0.0-beta.2/js/bootstrap.bundle.min.js')
body
.container
.row
.col-md-8
h1 Hi #{ name }
p This is a test
.col-md-4
p 测试动态PUG模板引擎

js代码

const Koa = require('koa')
const app = new Koa()
const views = require('koa-views')
const {resolve} = require('path') app.use(views(resolve(__dirname, './views'), {
extension: 'pug'
})) app.use(async(ctx, next) => {
await ctx.render('index', {
name: 'Susan'
})
}) app.listen(8080, () => {
console.log('http://localhost:8080')
})

koa-router

yarn add koa-router

代码

const router = require('koa-router')()

router.get('/news', async (ctx, next) => {
ctx.body = '路由'
}) router.get('/news/:id', async (ctx, next) => {
ctx.body = '动态路由'
}) app.use(router.routes())

路由分离

代码

const router = require('koa-router')()

router.prefix('/user')

router.get('/', async ctx => {
ctx.body = 'Hello Koa2'
}) router.get('/info', async ctx => {
ctx.body = 'Hello UserInfo'
}) module.exports = router
const user = require('./routes/user')

app.use(user.routes()).use(user.allowedMethods())

GET

通过ctx.query/ctx.querystring/ctx.request.query/ctx.request.querystring

代码

router.get('/news', async (ctx, next) => {
console.log('ctx.query', ctx.query)
console.log('ctx.querystring', ctx.querystring)
console.log('ctx.request.query', ctx.request.query)
console.log('ctx.request.querystring', ctx.request.querystring)
})
curl i http://localhost:3000/news?name='Susan&age=12'

POST

通过koa-body

const koaBody = require('koa-body')

app.use(koaBody())

router.post('/doAction', async ctx => {
console.log('ctx.request.body', ctx.request.body)
})
curl i http://localhost:3000/doAction -d 'name=Susan,age=20'

静态资源

安装koa-static

代码

const server = require('koa-static')

app.use(server(resolve(__dirname, './static')))

router.get('/', async ctx => {
await ctx.render('index')
})
<link href="css/style.css" rel="stylesheet" />

<img src="img/1.jpg"/>

<script src="js/index.js"></script>

Cookie

ctx.cookies.set(name, value, [options])

ctx.cookies.get(name)

如何处理中文

使用Buffer转换

// 将中文转换base64字符串
new Buffer(value).toString('base64')
// 将base64字符串转换为中文
new Buffer(value, 'base64').toString()

Session

安装koa-session

const session = require('koa-session')

app.keys = ['some secret hurr']
const CONFIG = {
key: 'koa:sess',
maxAge: ,
autoCommit: true,
overwrite: true,
httpOnly: true,
signed: true,
rolling: false,
renew: false
} app.use(session(CONFIG, app)) router.get('/', async ctx => {
let n = ctx.session.view ||
ctx.session.view = ++ n
ctx.body = n
})

Mongodb 

https://www.mongodb.com/download-center?jmp=nav#community

操作数据库

http://mongodb.github.io/node-mongodb-native/

安装mongodb

连接数据库,创建集合,插入数据

const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://127.0.0.1:27017' // URL
const dbName = 'dbs' // 数据库名称
const client = new MongoClient(url) // 创建一个Mongodb Client client.connect(err=>{ // 连接数据库
if (err) return
console.log('Connected successfully to server')
const db = client.db(dbName)
// 插入数据
db.collection('documents').insertMany([
{a:},
{b:},
{c:}
])
db.collection('documents').insertOne(
{d:}
)
client.close()
})

查找数据

db.collection('documents').find({})
.toArray((err, docs) => {
if (err) return
console.log(docs)
})

更新数据

db.collection('documents')
.updateOne({a:}, {$set: {a: }}, (err, res) => {
if (err) return
console.log(res)
}) db.collection('documents')
.updateMany({a:}, {$set: {a: }}, (err, res) => {
if (err) return
console.log(res)
})

删除数据

db.collection('documents')
.deleteOne({a:}, (err, res) => {
if (err) return
console.log(res)
})

Robo 3T

https://robomongo.org/

Mongoose

https://mongoosejs.com/docs/api.html

连接数据库

首先配置数据库,创建一个dbs的数据库

module.exports = {
dbs:'mongodb://127.0.0.1:27017/dbs'
}

数据库创建完毕,那么创建model也就是集合,即表

const mongoose = require('mongoose') 

let personSchema = new mongoose.Schema({
name: String,
age: Number
}) module.exports = mongoose.model('Person', personSchema)

数据库和表创建完毕,那么开始连接数据库

const mongoose = require('mongoose')
const dbConfig = require('./dbs/config')
mongoose.connect(dbConfig.dbs, {
useNewUrlParser: true
})

此刻数据库连接成功,那么我们开始

添加数据

router.post('/addPerson', async ctx => {
const person = new Person({
name: ctx.request.body.name,
age: ctx.request.body.age
})
let code
try {
await person.save()
code =
} catch (error) {
code =
}
ctx.body = {
code
}
})

查询数据

const res = await Person.findOne({name:ctx.request.body.name})
const ress = await Person.find({name: ctx.request.body.name})

更新数据

const result = await Person.where({
name: ctx.request.body.name
}).update({
age:ctx.request.body.age
})

删除数据

const result = await Person.where({
name: ctx.request.body.name
}).remove()

Redis

访问网页服务器端会在客户端设置cookie保存session

每次请求把cookie中session发送到服务器端

服务端用session保存客户端状态

服务器端会把session的值保存到Redis中

浏览器用cookie保存session

而且Redis是一个非常快速的读写数据库

案例:登录校验

安装

https://github.com/MicrosoftArchive/redis/releases

启动Redis

安装koa中间件操作Redis

yarn add koa-generic-session koa-redis

连接Redis

app.keys=['keys','keyskeys'] // session加密处理,随便两个值
app.use(session({
key:'mt',
prefix:'mtpr',
store: new Redis(),
}))

使用session

ctx.session.count++

我们也可以直接对Redis操作

const Store = new Redis().client
const st = await Store.hset('fix', 'name', Math.random())

使用redis-cli.exe查看数据

key *

get

hset

hget

上一篇:做了6年的Java,一文了解OOM及解决方案


下一篇:[SAP ABAP开发技术总结]字段符号FIELD-SYMBOLS