Skip to content

01koa 应用

index.js
js
/**
 * 核心代码 1千行
 * express  koa 开发成员基本一致
 * 写在前面 nodejs coderwhy13 未看完【koa 源码解读部分没看】
 * 
*/

/**
 * koa-router 社区插件
 * 
 * */ 
const Koa = require('koa'); //类

const app = new Koa()

// koa只有 use 这一种注册方式
// 无 方法注册
// 无 连续注册
// 无 path 注册

// app.use(({ resquest,response}, next) => {
//     response.body = "Hello Word"
// })

const UserRouter = require('./router/user')

app.use(UserRouter.routes()) // UserRouter.routes() 获取中间件

// 统一错误处理 某个路由错误
app.use(UserRouter.allowedMethods())

/**
 * params 处理 
*/ 
const ParamsRouter = require('./router/params')

app.use(ParamsRouter.routes()) 

// 统一错误处理 某个路由错误
app.use(ParamsRouter.allowedMethods())

/**
 * json 处理 
*/

const JsonRouter = require('./router/json')

app.use(JsonRouter.routes())

// 统一错误处理 某个路由错误
app.use(JsonRouter.allowedMethods())


const ReponseRouter = require('./router/response')

app.use(ReponseRouter.routes())

// 统一错误处理 某个路由错误
app.use(ReponseRouter.allowedMethods())


// const StaticRouter = require('./router/static')

// app.use(StaticRouter.routes())

// // 统一错误处理 某个路由错误
// app.use(StaticRouter.allowedMethods())


const koaStatic = require('koa-static')
app.use(koaStatic('./static'))


const ErrorRouter = require('./router/error')

app.use(ErrorRouter.routes())

// 统一错误处理 某个路由错误
app.use(ErrorRouter.allowedMethods())


// 处理页面错误

app.on('error', (err, ctx) => {
    ctx.status = 401
    ctx.body = err.message
})
app.listen(8080, () => { 
    console.log('8080 服务器启动成功');
})

02 koa 了解

user.js
js
const Router = require('koa-router')

const router = new Router({ prefix: "/users" })

router.get('/', function ({ request, response }, next) {
    response.body = "users get"
})

router.post('/', function ({ request, response }, next) {
    response.body = "users post"
})

router.put('/', function ({ request, response }, next) {
    response.body = "users put"
})

module.exports = router

03 koa params

params.js
js
const Router = require('koa-router')

const router = new Router({ prefix: "/params" })

router.get('/:id', function ({ request, response }, next) {
    const { url, params, query } = request
    console.log(url, params, query);
    response.body = "params get"
})

router.post('/', function ({ request, response }, next) {
    const { url, params, query } = request
    console.log(url, params, query);
    response.body = "params post"
})

router.put('/', function ({ request, response }, next) {
    response.body = "params put"
})

module.exports = router

04 koa json

json.js
js
const Router = require('koa-router')

const router = new Router({ prefix: "/json" })
const path = require('path')

/**
 * koa-bodyparser 第三方库
 * 解析json 解析 urlencoded
 * 
 */
const bodyParser = require('koa-bodyparser')
router.use(bodyParser())

const multer = require('koa-multer')


router.get('/', function ({ request, response }, next) {
    response.body = "json get"
})

const upload = multer({
    dest: '/upload',
})

/**
 * form-data 解析
 */

// router.post('/', upload.any(), function ({ request, response,req }, next) {
//     console.log(request.body); //解析json  解析 urlencoded
//     console.log(req.body); //form-data 解析
//     response.body = "json post"
// })

/**
 * 文件上传
 * 
 */
const uploadFile = multer({
    storage: multer.diskStorage({
        destination: (req, file, cb) => {
            cb(null, './uploads') //文件夹必须是存在的
        },
        filename: (req, file, cb) => {
            // 原始文件扩展名称
            cb(null, +new Date() + path.extname(file.originalname));
        }
    })
})

router.post('/', uploadFile.single('file'), function ({ request, response, req }, next) {
    console.log(request.body); //解析json  解析 urlencoded
    console.log(req.body); //form-data 解析
    response.body = "json 文件上传"
})


router.put('/', function ({ request, response }, next) {
    response.body = "json put"
})




module.exports = router

05 koa response对象

response.js
js
const Router = require('koa-router')

const router = new Router({ prefix: "/response" })

router.get('/', function ({ request, response }, next) {
    response.body = "response get"
})

router.post('/', function (ctx, next) {
    // response.status 默认为 404
    // response.body = "response post"
    // array
    // response.body = [90,90,23]
    // console.log(response.status);
    // 返回数据
    ctx.body = { name: 'response' }
    // 都可以直接进行获取 源码直接是实现了代理
})

router.put('/', function ({ request, response }, next) {
    response.body = "response put"
})
/**
 * 了解真相 再能获得绝对的自由
 */ 
module.exports = router

06 koa静态资源服务器

static.js
js
const Router = require('koa-router')
const router = new Router({ prefix: "/static" })
/**
 *或许是不支持 这种写法
 * 直接zaiapp.js 里面实现是没问题的
 */ 
const koaStatic = require('koa-static')
router.use('/',koaStatic('../static'))
// router.get('/', function ({ request, response }, next) {
//     response.body = "static get"
// })
module.exports = router

07 koa错误处理

error.js
js
const Router = require('koa-router')

const router = new Router({ prefix: "/error" })

router.get('/', function (ctx, next) {
    try {
        const err = new Error("Couldn't connect")
        ctx.app.emit('error', err ,ctx)
   } catch (error) {
    console.log('error', error);
   }
})

module.exports = router

08 koa路由

js
/**
 * 核心代码 1千行
 * express  koa 开发成员基本一致
 * 写在前面 nodejs coderwhy13 未看完【koa 源码解读部分没看】
 * 
*/

/**
 * koa-router 社区插件
 * 
 * */ 
const Koa = require('koa'); //类

const app = new Koa()

// koa只有 use 这一种注册方式
// 无 方法注册
// 无 连续注册
// 无 path 注册

// app.use(({ resquest,response}, next) => {
//     response.body = "Hello Word"
// })

const UserRouter = require('./router/user')

app.use(UserRouter.routes()) // UserRouter.routes() 获取中间件

// 统一错误处理 某个路由错误
app.use(UserRouter.allowedMethods())

/**
 * params 处理 
*/ 
const ParamsRouter = require('./router/params')

app.use(ParamsRouter.routes()) 

// 统一错误处理 某个路由错误
app.use(ParamsRouter.allowedMethods())

/**
 * json 处理 
*/

const JsonRouter = require('./router/json')

app.use(JsonRouter.routes())

// 统一错误处理 某个路由错误
app.use(JsonRouter.allowedMethods())


const ReponseRouter = require('./router/response')

app.use(ReponseRouter.routes())

// 统一错误处理 某个路由错误
app.use(ReponseRouter.allowedMethods())


// const StaticRouter = require('./router/static')

// app.use(StaticRouter.routes())

// // 统一错误处理 某个路由错误
// app.use(StaticRouter.allowedMethods())


const koaStatic = require('koa-static')
app.use(koaStatic('./static'))


const ErrorRouter = require('./router/error')

app.use(ErrorRouter.routes())

// 统一错误处理 某个路由错误
app.use(ErrorRouter.allowedMethods())


// 处理页面错误

app.on('error', (err, ctx) => {
    ctx.status = 401
    ctx.body = err.message
})
app.listen(8080, () => { 
    console.log('8080 服务器启动成功');
})