koa的介绍
koa --基于Node.js平台的下一代web开发框架
koa是由express 人员打造的,致力于成为一个更小,更富有表现力见状的web框架,使用koa编写web应用,可以免除重复的回调函数嵌套,提升错误处理的效率。koa不在内核中绑定中间件。和express差不多,最大特点是可以避免异步嵌套。
koa安装使用
npm install --save koa
项目搭建:
1、npm init --yes 生成package.json
2、安装koa npm install --save koa
使用koa-router中间件
npm install koa-router --save
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
router.get('/', async (ctx) => {
let html = `
<ul>
<li><a href="/hello">helloworld</a></li>
<li><a href="/about">about</a></li>
</ul>
`
ctx.body = html
}).get('/hello', async (ctx) => {
ctx.body = '你好呀'
}).get('/about', async (ctx) => {
ctx.body = '你猜猜关于啥'
})
app.use(router.routes(), router.allowedMethods())
app.listen(3000);
中间件
中间件 Koa 应用程序是一个包含一组中间件函数的对象,它是按照类似堆栈的方式组织和执行的。Koa中使用app.use()用来加载中间件,基本上Koa 所有的功能都是通过中间件实现的。每个中间件默认接受两个参数,第一个参数是 Context 对象,第二个参数是next函数。只要调用next函数,就可以把执行权转交给下一个中间件。
const Koa = require('koa');
const app = new Koa();
// x-response-time
//匹配所有路由
app.use(async (ctx, next) => { //一个中间件
const start = Date.now();
await next(); //异步等待,匹配并且处理下一个中间件
const ms = Date.now() - start; //匹配理由完成后 继续返回执行
ctx.set('X-Response-Time', `${ms}ms`);
});
// logger
app.use(async (ctx, next) => { //中间件
const start = Date.now();
await next();
const ms = Date.now() - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}`);
});
// response
router.get('news',asynx(ctx)=>{ //匹配路由news
console.log("匹配路由news")
})
app.listen(3000);
模板引擎
渲染html页面。
常用的渲染的指令:
1、引入公共的模板
<% include header.ejs %>
2、绑定数据
<%= list %>
3、绑定html,解析dom元素
<%- value %>
4.共享数据
ctx.state = {
commonTitle: ‘’ 我是公共数据"
}
# 安装koa模板使用中间件
$ npm i --save koa-views
# 安装ejs模板引擎
$ npm i --save ejs
const Koa = require('koa')
const views = require('koa-views')
const path = require('path')
const app = new Koa()
// 加载模板引擎
app.use(views((__dirname, './view'), { //举例子 ,这里的dirname为index
extension: 'ejs'
}))
app.use(async(ctx)=>{
ctx.state.commonTitle = "公共复用的标题";
await next(); //继续向下匹配
})
app.use(async (ctx) => {
let title = 'Koa2' //单个数据
let list = ['111','222']
await ctx.render('index', { //在index.ejs中渲染title数据
title,
})
})
app.listen(3000)
./view/index.ejs 模板
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
</head>
<body>
<h1><%= title %></h1> //渲染title
<h2><%=commonTitle %></h2> //渲染公共资源
<div>
<% for(var i = 0;i<list.length;i++) { %>
<p><%=list[i] %></p> //渲染list数组
}
</div>
</body>
</html>
静态资源中间件
1、cnpm install koa-static --save
2、const static = require(‘koa-static’)
3、配置 app.use(static(‘public’)) //public为静态资源的目录名
配置也可以写 app.use(static (__dirname + ‘/public’))
模板引擎 art-template
koa cookie
cookie 保存在浏览器客户端,保存信息,浏览历史记录,记住密码等
ctx.cookies.set(‘userlist’,‘zhangsan’,{
maxAge:60 * 1000 * 60,
path:’/news’, //可以配置的页面
domain:‘baidu.com’ //正常情况不用配置
})
ctx.cookies.get(‘userlist’)
session
session是另外一种记录客户状态的机制,不同的是,session保存在服务器中。
浏览器访问服务器,第一次请求的时候,服务器 会创建一个session对象,生成一个类似的key ,value的键值对,然后将key返回到浏览器中,浏览器再访问的时候,携带key(cookie),找到对应的value值。
//配置seesion的中间件
app.keys = [’ some secret hurr’]; //cookie的签名
const CONFIG = {
key: ‘koa:sess’,
maxAge:300,
overwrite:true,
httpOnly:true,
signed:true,
rolling:false,
renew:true
}
app.use(session (CONFIG,app));
//获取session
ctx.session.userinfo = ‘张三’;
操作mongodb数据库
1、安装mongodb
cnpm install mongodb --save
2、引入mongodb下面的mongoClient
var MongoClient = require(‘mongodb’).MongoClient;
3、定义数据库链接的地址 以及 配置数据库
var url = ‘mongodb 😕/localhost:8080/koa’
4、node.js连接数据库
MongoClient.connent(url,(err,client)=>{
const db = client.db(dbName) ; 数据库db对象
})
5、操作数据库
db.user.insert
MongoClient.connect(url,(err,db)=>{
db.collection(‘user’).insertOne({“name”:“张三”},(err,result) =>{
db.close();
})
})
sequelize
sequelize(Sequelize是一个基于promise的nodejs orm,目前支持Postgres、mysql、SQLite和Microsoft SQL Server。它具有强大的事务支持,关联关系,读取和复制等功能。)