Koa2 学习笔记(第二天)

因为之前没涉及到后端知识,另外Node.js的资料确实比较少,并且解决方案比较多,express,koa,koa2,think,egg等等。
由于公司使用PHP的缘故,所以从PHP切入到后端,学会了ThinkPHP5,所以以此为跳板来学习Koa2。

今天主要是学习使用Koa2的路由中间件koa-router, 我看阮一峰老师推出的教程用的是koa-route,我比较了下,koa-route的用法简单些,但是功能少了些。所以还是使用koa-router。

其实可以看一下原生koa2的路由配置写法:

const Koa = require('koa')
const app = new Koa()
const fs = require('fs')

function render(viewUrl) {
    return new Promise((resolve, reject) => {
        // fs模块中的第二个参数,可以是String,也可以是Object
        // 用来指定字符编码,如果未指定,返回原始的buffer。(不设置也是可以访问html的)
        fs.readFile(`./view/${viewUrl}`, 'binary', (err, data) => {
            if (err) {
                reject(err)
            } else {
                resolve(data)
            }
        })
    })
}

async function route(url) {
    let viewUrl
    switch (url) {
        case '/':
            viewUrl= 'index.html'
            break
        case '/index':
            viewUrl= 'index.html'
            break
        case '/hello':
            viewUrl= 'hello.html'
            break
        default:
            viewUrl= '404.html'
            break
    }
    return await render(viewUrl)
}

app.use(async (ctx) => {
    let url = ctx.request.url
    let html = await route(url)
    ctx.body = html
})

app.listen(3000)
console.log('The project is starting at port 3000')

比较麻烦。

所以可以使用koa-router

用法:

1,基础用法

const Koa = require('koa')
const app = new Koa()
const Router = require('koa-router')

// 需要实例化
const router = new Router()
router.get('/', ctx => {
    ctx.body = '这是index页面'
})

// 需要加载中间件
// router.routes() 返回一个中间件
app.use(router.routes())

app.listen(3000)

2,多路由

const Koa = require('koa')
const app = new Koa()
const Router = require('koa-router')

// 需要实例化
const index = new Router()
index.get('/', ctx => {
    ctx.body = '这是index页面'
})

const product = new Router()
product.get('/food', ctx => {
    ctx.body = 'food页面'
}).get('/drink', ctx => {
    ctx.body = 'drink页面'
})

// 需要先把各子路由装载到总的router中
const router = new Router()
// 装载的时候是use,不是get
router.use('/', index.routes())
router.use('/product', product.routes())

// 需要加载中间件
// router.routes() 返回一个中间件
app.use(router.routes())

app.listen(3000)

3, 重定向

const Koa = require('koa')
const app = new Koa()
const Router = require('koa-router')
const router = new Router()

router.get('/hello', ctx => {
    ctx.body = '我是吐蕃国师鸠摩智'
})

router.redirect('/sb', 'hello')
// 想当于
//router.all('/sb', function (ctx) {
//  ctx.redirect('/hello');
//  ctx.status = 301;
//});

app.use(router.routes())

app.listen(3000)

4,前缀prefix

const Koa = require('koa')
const app = new Koa()
const Router = require('koa-router')
const router = new Router({
    'prefix': '/spawn'
})

router.get('/hello', ctx => {
    ctx.body = '我是吐蕃国师鸠摩智'
})

app.use(router.routes())

app.listen(3000)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值