koa

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。它具有强大的事务支持,关联关系,读取和复制等功能。)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值