01koa 应用
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 了解
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
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
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对象
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静态资源服务器
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错误处理
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 服务器启动成功');
})