express和Koa的异同
1、安装:
express:npm install express -g
Koa: npm install -g koa-generator
2、创建项目:
快速创建 package.json: npm init -y
express:
第一步初始化包:npm init -y
第二步安装express:npm install express --save
Koa:
第一步初始化包:npm init -y
第二步安装Koa:npm install --save koa
3、创建路由:
express:
const express = require('express')
//创建express实例
const app = express()
//创建路由 http://127.0.0.1/index
app.get('/index', (req, res) => {
res.send('Hello World!')
})
//http://127.0.0.1/info/2
app.post('/info/:id', function (req, res) {
console.log(req.params);//{ id: '2' }
res.send(`输入的参数为${req.params.id}`);//输入的参数为2
})
//启动路由在 http://127.0.0.1
app.listen(80, () => {
console.log('http://127.0.0.1')
})
Koa:
//安装路由 npm install --save koa-router
//引入 Koa
const Koa = require('koa');
//引入路由
const router = require('koa-router')();
//创建koa实例
const app = new Koa();
//http://localhost:3000/
router.get('/', async(ctx, next)=> {
ctx.body = "Hello koa";
})
//http://localhost:3000/news
router.get('/news', async(ctx, next) => {
ctx.body = "新闻 page"
});
//http://localhost:3000/news/2
router.post('/news/:id', async(ctx, next) => {
console.log(ctx.params); //{ id: '2' }
ctx.body = `新闻 pagePOST,输入的参数为${ctx.params.id}`;
});
//启动路由
app.use(router.routes());
//可以设置不同的 response 响应头 (官方推荐,也可省略)
app.use(router.allowedMethods());
app.listen(3000, () => {
console.log('starting at port http://localhost:3000/');
});
3、中间件执行顺序:
express执行顺序:
const express = require('express')
//创建express实例
const app = express()
//创建路由 http://127.0.0.1/index
app.get('/index', (req, res,next) => {
console.log('111')
res.send('Hello World!')
next()
console.log('22')
})
//http://127.0.0.1/info/2
app.post('/info/:id', function (req, res,next) {
console.log('33')
res.send(`输入的参数为${req.params.id}`);//输入的参数为2
next()
console.log('44')
})
//启动路由在 http://127.0.0.1
app.listen(80, () => {
console.log('http://127.0.0.1')
})
Koa执行顺序:
const Koa=require('koa');
const router = require('koa-router')(); /*引入是实例化路由** 推荐*/
const app=new Koa();
//匹配任何路由 ,如果不写next,这个路由被匹配到了就不会继续向下匹配
app.use(async (ctx,next)=>{
console.log('1、这是第一个中间件01');
await next();
console.log('5、匹配路由完成以后又会返回来执行中间件');
})
app.use(async (ctx,next)=>{
console.log('2、这是第二个中间件02');
await next();
console.log('4、匹配路由完成以后又会返回来执行中间件');
})
//http://localhost:3000/
router.get('/',async (ctx)=>{
ctx.body="首页";
})
//http://localhost:3000/news
router.get('/news',async (ctx)=>{
console.log('3、匹配到了news这个路由');
ctx.body='这是一个新闻';
})
app.use(router.routes()); /*启动路由*/
app.use(router.allowedMethods());
app.listen(3000, () => {
console.log('starting at port http://localhost:3000/');
});