Koa2
安装
yarn add koa
代码
Koa的核心代码就三行
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
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
Koa2的更多相关文章
- Koa2 的安装运行记录(二)
参考 :koa2-boilerplate https://github.com/superalsrk/koa2-boilerplate Ajax Login and Ajax Logout in ...
- Koa2 的安装运行记录(一)
1.参考koa+react(一) http://blog.suzper.com/2016/10/19/koa-react-%E4%B8%80/ 为了使用 KOA2 能够运行,必须能够使用ES7语法 a ...
- koa2+koa-views示例
app.js var Koa = require('koa') var fs = require('fs') var path = require('path') var koaStaticPlus ...
- Koa2 源码解析(1)
Koa2 源码解析 其实本来不想写这个系列文章的,因为Koa本身很精简,一共就4个文件,千十来行代码. 但是因为想写 egg[1] 的源码解析,而egg是基于Koa2的,所以就先写个Koa2的吧,用作 ...
- nodejs6下使用koa2
koa2里面使用ES7的语法,如async.await所以需要运行在node7.6之后:但在node7.6之前也可以利用babel是的koa2可以运行. 首先项目中安装babel,和babel的几个模 ...
- koa2 use里面的next到底是什么
koa2短小精悍,女人不爱男人爱. 之前一只有用koa写一点小程序,自认为还吼吼哈,知道有一天某人问我,你说一下 koa或者express中间件的实现原理.然后我就支支吾吾,好久吃饭都不香. 那么了解 ...
- koa2 controller中实现类似sleep的延迟功能
今天有同事问我如何在koa2中的controller中使用延迟执行的功能,他直接在controller中使用setTimeout,但是没效果. 错误的代码类似下面这样: // 错误的方法 export ...
- 使用下一代web开发框架koa2搭建自己的轻服务器
Koa 是由 Express 原班人马亲情打造的新一代web框架.既然已经有 Express 了,为什么又要搞一个Koa出来呢?因为 Koa 相比 Express 体积更小,代码更健壮,作用更纯粹. ...
- 一键生成koa/koa2项目:
一键生成koa/koa2项目: 1. npm install -g koa-generator 2.新建项目目录 koa mytest (koa1项目) koa2 koa2test (koa2项目) ...
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
随机推荐
- java方法 throws exception 事务回滚机制
使用spring难免要用到spring的事务管理,要用事务管理又会很自然的选择声明式的事务管理,在spring的文档中说道,spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检 ...
- window10单机安装storm集群
适合范围:storm自由开源的分布式实时计算系统,擅长处理海量数据.适合处理实时数据而不是批处理. 安装前的准备 1.安装zookeeper ①下载zookeeperhttps://zookeeper ...
- Spring+Mybatis+SpringMVC+Maven+MySql搭建实例(转)
http://blog.csdn.net/evankaka/article/details/48785513?spm=5176.100239.blogcont28591.10.9Fdj9R
- Springboot框架,实现请求数据解密,响应数据加密的功能。
一.简要说明: 在做这个功能的时候,参考了很多文章,也试了用过滤器解决.但总体来说还是很麻烦,所以换了另一种解决方案.直接实现RequestBodyAdvice和ResponseBodyAdvice两 ...
- 实验六 CC2530平台上P2P通信的TinyOS编程
实验六 CC2530平台上P2P通信的TinyOS编程 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生初步的掌握射频通信TinyOS编程方法 学生通过本实验应理解TinyOS中 ...
- Build up java environment(配置java环境)
1,配置环境变量 我的电脑,右键计算机图标,点击“属性” 点击“高级系统设置” 点击“环境变量” “系统变量”一栏,点击“新建” 弹出输入“变量名”.“变量值”窗口 “变量名”输入“JAVA_HOME ...
- mysql 两张表的数据设置主外健关联删除
image_group 主表 image 副表 alter table image add constraint fk_group_idforeign key (group_id)references ...
- python画高斯分布图形
高斯分布,也叫正态分布,是一个在数学.物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力. 若随机变量X服从一个数学期望为μ.方差为σ^2的正态分布,记为N(μ,σ^2).其概率 ...
- Alpha阶段个人心得
在一个学期的学习中,我从一个只会一个人打打小规模代码的初学者也变成了一个能参与到团队做项目的“入门码农”,而我们团队从一开始对大型项目的望而生畏无从下手变成细分任务各司其职,也了解并感受到github ...
- 普通路由器刷开源固件DD-WRT的简单过程
DD-WRT是基于Linux的无线路由软件,功能强大,它提供了许多一般路由器的软体所没有的功能,将路由器固件升级到DD-WRT可以提升内建于预设固件的限制,并将其转换成强大且具有进阶功能的商业级路由器 ...