• 23


    1- 使用 koa 搭建服务器:

    // 安装koa
    const koa = require('koa');
    
    // 创建服务器
    const app = new koa();
    
    // context => ctx  上下文,包含req,和res
    app.use(async (ctx) => {
        ctx.body = 'hello koa2'
    })
    
    app.listen(3000)
    console.log('运行在3000端口')

    2- 如何配置 koa 路由:

    const koa = require('koa')
    
    // 创建路由对象
    const router = require('koa-router')();
    
    // 创建服务
    const app = new koa()
    
    // 路由请求
    router.get('/index', (ctx) => {
        ctx.body = 'hello index.js'
    })
    router.get('/list', (ctx) => {
        ctx.body = 'hello index'
    })
    // 启用
    app.use(router.routes())
        .use(router.allowedMethods())
    
    // 监听请求
    app.listen(3000)
    console.log('运行在3000端口')

    3- 静态资源如何获取:

    var koa=require('koa')
      var app=new koa()
      var Router=require('koa-router')
      var router=Router()
      var path=require('path')
      var static=require('koa-static')
      app.use(static(path.join(__dirname,'public')))
      router.use('/',(ctx)=>{
        ctx.body='koa'
      })
      app.use(router.routes())
      .use(router.allowedMethods())
      app.listen(3000,()=>{
        console.log('服务器已启动,端口正在监听...')
      })

    4- koa 如何使用模板引擎:

    // 模板引擎
    const koa = require('koa')
    const router = require('koa-router')();
    // 引入模板引擎
    const ejs = require('ejs')
    const views = require('koa-views')
    const render = require('koa-art-template')
    const path = require('path')
    
    const app = new koa();
    render(app, {
        root: path.join(__dirname, 'views'),
        extname: '.html',
        debug: process.env.NODE_ENV !== 'production'
    })
    // 路由请求
    router.get('/add', async (ctx) => {
        // let html = ejs.render('', users);
        let lis = '张三'
        await ctx.render('index', {
            lis
        })
    })
    
    // 启用
    app.use(router.routes())
        .use(router.allowedMethods())
    
    // 监听请求
    app.listen(3000)
    console.log('3000......')

    5- 使用 koa 实现一个用户增删改查的案例:

    app.js为入口文件,功能是导入文件,配置路由,引入koa组件,最后启动服务。

    // 安装koa
    const koa = require('koa');
    require('./model/index.js');
    const path = require('path');
    const queryString = require('querystring');
    
    // const bodyParser = require('koa-bodyparser');
    const bodyParser = require('koa-bodyparser')
    
    // 加载模板引擎
    const render = require('koa-art-template')
    // 加载
    
    // 加载数据库
    const User = require('./model/user.js');
    // 加载路由模块,创建路由对象
    const router = require('koa-router')();
    
    // 创建服务器
    const app = new koa();
    
    // 处理post参数
    app.use(bodyParser());
    
    render(app, {
        root: path.join(__dirname, 'views'),
        extname: '.art',
        debug: process.env.NODE_ENV !== 'production'
    })
    
    // 添加路由请求
    router.get('/add', async (ctx) => {
        await ctx.render('add', {})
    });
    router.get('/list', async (ctx) => {
        let user = await User.find();
        await ctx.render('list', {
            user
        })
    });
    
    // 添加用户
    router.post('/add', async (ctx) => {
        /*   ctx.body = ctx.request.body;
          console.log(ctx.body) */
    
        await User.create(ctx.request.body);
        // 重定向页面
        ctx.redirect('/list');
    });
    // 删除用户
    router.get('/remove/:id', async (ctx) => {
        // console.log(ctx.params)
        // ctx.body = ctx.params
        let id = ctx.params.id.substring(1, ctx.params.id.length - 1);
        // ctx.body = id;
        // console.log(id);
        await User.findOneAndDelete({
            _id: id
        });
        // 重定向页面
        ctx.redirect('/list');
    });
    
    // 修改用户
    router.get('/modify/:id', async (ctx) => {
        let query = ctx.params.id.substring(1, ctx.params.id.length - 1);
        console.log(query)
        let user = await User.findOne({
            _id: query
        })
        // console.log(user)
        let hobbies = ["足球", "篮球", "橄榄球", "敲代码", "抽烟", "喝酒", "烫头"]
        ctx.render('modify', {
            user,
            hobbies
        })
    })
    // 修改
    router.post('/modify/:id', async (ctx) => {
        let id = ctx.params.id.substring(1, ctx.params.id.length - 1);
        let userUpdate = ctx.request.body;
        await User.updateOne({
            _id: id
        }, userUpdate);
        // 重定向页面
        ctx.redirect('/list');
    })
    
    
    // 启用路由
    app.use(router.routes())
        .use(router.allowedMethods())
    
    // 监听端口
    app.listen(3000);
    console.log('3000.......')

    model/index.js : 连接数据库:

    // 数据库连接
    const mongoose = require('mongoose')
    
    // 连接数据库
    mongoose.connect('mongodb://localhost/user', {
            useNewUrlParser: true,
            useUnifiedTopology: true
        })
        .then(() => {
            console.log('数据库连接成功')
        })
        .catch(() => {
            console.log('数据库连接失败')
        })

    model/user.js  创建数据库集合规则,创建数据库,添加数据

    // 数据库集合规则
    const mongoose = require('mongoose')
    // 创建集合规则
    const userSchema = new mongoose.Schema({
        name: {
            type: String,
            required: true,
            minlength: 2,
            maxlength: 20
        },
        age: {
            type: Number,
            min: 18,
            max: 80
        },
        email: {
            type: String,
            required: true,
            maxlength: 30,
            minlength: 10
        },
        hobbies: {
            type: Array,
            default: ['抽烟', '喝酒', '烫头']
        },
        password: {
            type: String,
            required: true,
            maxlength: 30,
            minlength: 6
        }
    })
    
    // 根据集合规则创建集合
    const User = mongoose.model('User', userSchema)
    
    // 添加数据
    /* User.create({
        name: '沙和尚',
        age: 20,
        email: 'shaheshang@163.com',
        hobbies: ['吃肉', '睡觉'],
        password: '1111111111'
    }, {
        name: '唐僧',
        age: 20,
        email: 'tangseng@163.com',
        hobbies: ['吃肉', '睡觉'],
        password: '1111111111'
    }, {
        name: '玉兔精',
        age: 20,
        email: 'yutujing@163.com',
        hobbies: ['吃肉', '睡觉'],
        password: '1111111111'
    }) */
    /* User.deleteMany({
        
    }).then((result) => {
        console.log(result)
    }) */
    /* User.find({}).then((result) => {
        console.log(result)
    }) */
    // 导出用户集合表
    module.exports = User
  • 相关阅读:
    洛谷P4768 [NOI2018]归程(可持久化并查集,最短路)
    FFT/NTT总结+洛谷P3803 【模板】多项式乘法(FFT)(FFT/NTT)
    洛谷P2480 [SDOI2010]古代猪文(费马小定理,卢卡斯定理,中国剩余定理,线性筛)
    洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)
    洛谷P2054 [AHOI2005]洗牌(扩展欧几里德)
    洛谷P3868 [TJOI2009]猜数字(中国剩余定理,扩展欧几里德)
    洛谷P1516 青蛙的约会(扩展欧几里德)
    Heaven of Imaginary(PKUSC2018)
    二进制高精度模板(高精度)
    洛谷UVA12995 Farey Sequence(欧拉函数,线性筛)
  • 原文地址:https://www.cnblogs.com/xuexiaotian/p/14496626.html
Copyright © 2020-2023  润新知