1.Koa框架概述
Koa是一个基于Node的web服务器开发框架,利用Koa框架,可以不必从0开始使用node内置的核心模块–http模块,搭建服务器。
2.安装Koa
- 创建项目
- 利用npm初始化
npm init
- 安装Koa
npm install --save koa
3.quick-start
新建server.js文件:
//引入Koa
const Koa = require("koa");
//创建实例
const app = new Koa();
//设置监听窗口
app.listen(3000,()=>{
console.log("server is running");
});
在项目中,打开命令行,启动服务器
node server.js
//如果全局安装了nodemon
//推荐
nodemon server.js
但由于服务器没有响应页面的具体内容,所以打开浏览器
http://127.0.0.1:3000
将显示Not Found
4.Koa的hello world
如何在浏览器页面上显示hello world?
使用app的use方法设置响应的内容
app.use(ctx,next);
/*
ctx:上下文变量,获取请求和响应的相关信息
next:处理下一个异步函数
*/
app的use方法将调用一个中间件(函数)
该中间件的调用时机在请求和响应之间
//引入Koa
const Koa = require("koa");
//创建实例
const app = new Koa();
//设置页面响应内容
app.use(async (ctx,next) => {
ctx.body = "hello world"
await next();
})
app.use(async (ctx,next) => {
console.log("我是一个中间件")
})
//设置监听窗口
app.listen(3000,()=>{
console.log("server is running");
});
5.路由
浏览器可以使用不同的方法发送请求,常用的方法如下
- get:用于使用给定的URI从给定服务器中检索信息,即从指定资源中请求数据。
- post:用于将数据发送到服务器以创建或更新资源,比如登录信息
- del:用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容
这里主要使用get来获取页面
并利用koa-router来指定具体路由
安装koa-router
cnpm install --save koa-router
用法:
const Koa = require("koa");
const router = require("koa-router")();//加括号:引用并执行koa-router(路由所需要的依赖)
const app = new Koa();
router.get("/",async(ctx)=>{
//反引号:跨行书写(人类习惯)
ctx.body = `
<h1>title</h1>
<p>this is content</p>
`
})
router.get("/learn",async ctx =>{
ctx.body = "learn page";
})
//让router和app产生关联
app.use(router.routes());//在koa项目中引入router
app.listen(3000,()=>{
console.log('server is running')
})
静态路由
理论上,用户只要输入具体的url就能获取web服务器的具体内容,但是,为了安全,我们只想让用户访问到该访问的内容,所以需要设置静态路由,将面向用户的文件放在这里:
- 安装koa-static依赖
npm install --save koa-static
- 设置静态路由
const Koa = require("koa");
const router = require("koa-router")();//引用并执行koa-router(路由所需要的依赖)
const app = new Koa();
//如何创建静态路由
// 引入koa-static依赖
const static = require("koa-static");
//__dirname 可以直接获取当前项目的绝对路径
// console.log("当前项目的绝对路径:"+__dirname);
app.use(static(__dirname+"/public"));//(用户仅能访问该文件夹内的内容,需要本地创建该文件夹)
router.get("/",async(ctx)=>{
ctx.body = `
<h1>title</h1>
<p>this is content</p>
<img src = '/image/hello.jpg'>
`
})
router.get("/learn",async ctx =>{
ctx.body = "learn page";
})
//让router和app产生关联
app.use(router.routes());//在koa项目中引入router
app.listen(3000,()=>{
console.log('server is running')
})
效果: