node + koa + mongodb

  1. 创建服务并启动

    // 引入模块
    const Koa = require('koa');
    const { port } = require('./config');
    
    // 创建服务器实例
    const app = new Koa()
    
    // 监听服务启动
    app.listen(port,()=> {
      console.log('启动了');
    })
    
  2. 创建路由和接参
    引入koa-router 和 koa-body(解析body参数)

    子路由:

    const Router = require('koa-router')
    
    const blog = new Router()
    
    blog.get('/',async ctx => {
      ctx.body = 'blog的id:' + ctx.query.id
    })
    blog.get('/:id',async ctx => {
      ctx.body = 'blog的id:' + ctx.params.id
    })
    blog.post('/',async ctx => {
      ctx.body = 'blog的提交内容是:' + ctx.request.body.key
    })
    
    module.exports = blog
    

    路由主文件:

    const Router = require('koa-router')
    const router = new Router()
    
    // 具体路由
    const home = require('./home')
    const blog = require('./blog')
    
    
    router.use('/',home.routes())
    router.use('/blog',blog.routes())
    
    module.exports = router
    

    参数解析:

    // 引入模块
    const Koa = require('koa');
    const { port } = require('./config');
    const router = require('./router');
    const koaBody = require('koa-body')
    
    // 创建服务器实例
    const app = new Koa()
    
    
    
    // 挂载中间件
    // 解析参数需要在路由挂载之前
    app.use(koaBody({
      multipart:true, // formDate格式传参需要开启
      formidable: {  // 更多关于multipart的配置
        keepExtensions:true,
        onFileBegin:(name,file) => { 
          console.log(name,file);
        }
      }
    }))
    // 调用router.routes()来组装匹配好的路由,返回一个合并好的中间件
    // 调用router.allowedMethods()获得一个中间件,当发送了不符合的请求时,会返回 `405 Method Not Allowed` 或 `501 Not Implemented`
    app.use(router.routes()).use(router.allowedMethods(
        // throw: true, // 抛出错误,代替设置响应头状态
        // notImplemented: () => '不支持当前请求所需要的功能',
        // methodNotAllowed: () => '不支持的请求方式'
    ))
    
    
    
    
    // 监听服务启动
    app.listen(port,()=> {
      console.log('启动了');
    })
    

    注:koa-body和koa-bodyparser等具体解析,可参考此处

  3. 中间件挂在顺序
    在这里插入图片描述
    中间件遇到await next(),会向下执行下一个中间件,直到没有 await next(),原路返回,执行每个中间件await next()后的逻辑。

  4. 静态资源配置
    引入 koa-static

    // 引入模块
    const Koa = require('koa');
    const { port } = require('./config');
    const router = require('./router');
    const koaBody = require('koa-body')
    const static = require('koa-static')
    const path = require('path')
    
    // 创建服务器实例
    const app = new Koa()
    
    
    // 挂载中间件
    app.use(static(path.join(__dirname,'static')))
    app.use(static(path.join(__dirname,'public')))
    

    注:可设置多大静态资源库,会按由上到下顺序,进行资源访问。

  5. 数据库
    本次采用的是mongodb数据库

    const MongoClient = require('mongodb').MongoClient
    const { dbUrl, dbName } = require('../config/index')
    
    class Db {
      constructor(){
        this.instance = '' // 数据库对象
        this.connect()
      }
      // 解决总是重复链接问题
      static getInstance() {
        if (!Db.instance) {
          Db.instance = new Db()
        }
        return Db.instance
      }
      // 数据库链接
      async connect() {
        if (!this.instance) {
          const client =  await MongoClient.connect(dbUrl)
          this.instance = client.db(dbName)
          console.log('链接成功');
        }
      }
      // 查找数据
      async find(collectionName,json) {
        return await this.instance.collection(collectionName).find(json).toArray()
      }
      // 插入数据
      async insert(collectionName,json) {
        return await this.instance.collection(collectionName).insert(json)
      }
    }
    module.exports = Db.getInstance()
    

更多参考链接:

  1. https://www.itying.com/koa/article-index-id-60.html – koa中文文档
  2. https://www.kancloud.cn/luponu/mongoose/870695 – mongoose 中文文档
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值