koa学习

koa

hello world

复制代码
const Koa = require('koa')

const app = new Koa()


app.listen(8000,()=>{
  console.log('koa server success')
})

中间件:只能通过use来注册中间件

复制代码
// 中间件
app.use((ctx,next)=>{
  console.log('koa 普通中间件')
  ctx.response.body = 'hello koa middleware'

  next()
})

路由使用 koa-router

安装 npm install koa-router

创建路由文件 routers/users.js

复制代码
//routers/users.js
const Router = require('koa-router')
const router = new Router({prefix:'/users'})

// 用户列表接口 /users/lists

router.get('/lists',  (ctx, next) => {
  ctx.response.body = 'user lists'
})

module.exports = router

引入路由,注册路由

复制代码
const Koa = require('koa')

const userRouter = require('./routers/user')

const app = new Koa()

//  使用路由
app.use(userRouter.routes())
// 处理405和501错误
app.use(userRouter.allowedMethods()) 


app.listen(8000,()=>{
  console.log('koa server success')
})

参数解析

params 和 query

复制代码
const router = require('koa-router')

const userRouter = new router({prefix:'/users'})

userRouter.get('/:id', (ctx,next)=>{
  console.log('获取params参数', ctx.params)
  console.log('获取query参数', ctx.query)
  ctx.response.body = 'user id:'+ctx.params.id
})

app.use(userRouter.routes())

//请求路径 /users/yyy?username=yyy&password=123456Aa
//打印内容
//获取params参数 { id: 'yyy' }
//获取query参数 { username: 'yyy', password: '123456Aa' }

json 和 urlencoded

安装第三方插件 koa-bodyparser'

npm install koa-bodyparser'

引入插件,自动解析json和urlencoded参数
复制代码
const bodyParser = require('koa-bodyparser')

app.use(bodyParser())

app.use((ctx,next)=>{
    
    console.log('请求体参数', ctx.request.body)
    ctx.response.body = 'requset body parser'

})

form-data 参数解析

安装koa-multer插件

npm install koa-multer

引入,注册插件

`

const multer = require('koa-multer')

const upload = multer()

loginRouter.post('/', upload.any(), (ctx,next)=>{

console.log('form-data 数据', ctx.req.body) // 注意是在ctx.req.body中获取解析数据

ctx.response.body = 'login success'

})

`

文件上传

复制代码
const multer = require('koa-multer')


const storage = multer.diskStorage({
    // 文件保存路径
    destination: function (req, file, cb) {
        cb(null, './uploads/')
    },
    // 修改文件名称
    filename: function (req, file, cb) {  
      console.log('file', file)
      // 使用更安全的方式生成文件名
      const filename = Date.now() + '-' + Math.round(Math.random() * 1E9) + file.originalname
      cb(null, filename)
    }
})

const upload = multer({storage: storage})

uploadRouter.post('/image', upload.single('file'), (ctx,next)=>{

    ctx.response.body = 'upload success'
})

部署静态资源

安装插件 npm install koa-static

部署

复制代码
const staticAssets= require('koa-static')
app.use(staticAssets(__dirname + '/public')) // 接收静态资源目录
相关推荐
winfredzhang2 天前
从零构建:基于 Node.js 的全栈视频资料管理系统开发实录
css·node.js·html·音视频·js·收藏,搜索,缩略图
3824278273 天前
JS表单验证:className与classList区别详解
js
REDcker4 天前
Android WebView 版本升级方案详解
android·音视频·实时音视频·webview·js·编解码
winfredzhang5 天前
[实战] Node.js + DeepSeek 打造智能档案归档系统:从混乱到有序的自动化之旅
css·node.js·js·deepseek api
梦凡尘6 天前
前端web端解析 Word、Pdf 文档文本内容
pdf·js
梦凡尘7 天前
Marked.js 的使用及相关问题解决
前端·js
想看一次满天星10 天前
某里231——AST解混淆流程
爬虫·python·ast·js·解混淆
Han.miracle10 天前
JavaScript 基础核心知识点闯关练习
css·js
冥界摄政王10 天前
CesiumJS学习第四章 替换指定3D建筑模型
3d·vue·html·webgl·js·cesium
曲幽12 天前
手把手搞定FastAPI静态文件:安全、上传与访问
css·python·fastapi·web·js·favicon·staticfiles