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