Koa搭建简单服务器
程序员文章站
2022-07-02 17:58:13
1. dependencies 2. 主服务 引包 错误处理 服务端渲染 koa-ejs 路由 koa-router 开放静态资源 koa-static session koa-session 1. .keys 文件是通过脚本生成的用来 session 签名的密钥,数组,每个元素都是无规律的不同字符 ......
1. dependencies
"co-mysql": "^1.0.0", "koa": "^2.7.0", "koa-better-body": "^3.0.4", "koa-ejs": "^4.2.0", "koa-router": "^7.4.0", "koa-session": "^5.12.0", "koa-static": "^5.0.0", "mysql": "^2.17.1"
2. 主服务
引包
1 const fs = require('fs'); 2 const path = require('path'); 3 const koa = require('koa'); 4 const router = require('koa-router'); 5 const session = require('koa-session'); 6 const ejs = require('koa-ejs'); 7 const body = require('koa-better-body'); 8 9 const _static = require('./routers/static'); 10 const config = require('./config'); 11 12 const app = new koa(); 13 const router = new router();
错误处理
1 router.all('*', async (ctx, next) => { // * 表示所有的请求,都会经过这里的处理 2 try { 3 await next(); 4 } catch (e) { 5 ctx.throw(500, e); 6 } 7 });
服务端渲染 koa-ejs
1 ejs(app, { 2 root: path.resolve(__dirname, 'template'), // 模版路劲 3 layout: false, // 使用 render 方法渲染模版时有所区别,如果省略,会去找 template/layout.ejs
// false: ctx.render('admin/index.ejs') 'abc': ctx.render('abc/admin/index.ejs')
4 viewext: 'ejs',// 模版后缀名 5 cache: false, // 缓存 6 debug: false // 如果是 true,会把编译之后的内容全部输出 7 });
路由 koa-router
1 router.use('/admin', require('./routers/admin')); // localhost:8080/admin/xxx 2 router.use('/api', require('./routers/api')); // localhost:8080/api/xxx 3 router.use('', require('./routers/www')); // '' 表示根,localhost:8080/xxx
开放静态资源 koa-static
_static(router, { imagemaxage: config.imagemaxage, scriptmaxage: config.scriptmaxage, stylemaxage: config.stylemaxage, htmlmaxage: config.htmlmaxage, othermaxage: config.othermaxage });
/*
// 上面只是封装了, 比如
// ...
const static = require('koa-static');
// ...
router.all(/\.jsx?/i, static(path, options));
*/
session koa-session
1. .keys 文件是通过脚本生成的用来 session 签名的密钥,数组,每个元素都是无规律的不同字符组合
2. 这里可以使用同步读取文件的方式,因为是在启动服务的时候,只读取一次,所以,不会影响服务器性能
1 app.keys = fs.readfilesync('.keys').tostring().split('\r\n'); 2 app.use(session({ 3 maxage: 20 * 60 * 1000, // 缓存时间 20 分钟 4 renew: true // 自动续期 5 }, app));
处理 post 数据 koa-better-body
1 app.use(body({ 2 uploaddir: config.upload_dir 3 }));
数据库 mysql co-mysql
1 app.context.db = require('./libs/database'); // app.context 相当于 ctx 的原型,所以,可以使用 ctx.db,query(sql语句) 来操作数据库
配置
1. 很多地方都需要 config,直接加到 app.context 上,通过 ctx.config 使用
1 app.context.config = config;
1 app.listen(config.http_port, () => console.log(`server running on ${config.http_port}...`)); 2 app.use(router.routes());
3. 数据库
1 const mysql = require('mysql'); 2 const co = require('co-mysql'); 3 4 const config = require('../config'); 5 6 const conn = mysql.createpool({ 7 host: config.db_host, 8 user: config.db_user, 9 password: config.db_pass, 10 port: config.db_port, 11 database: config.db_name 12 }); 13 14 module.exports = co(conn);
4. md5
1 const crypto = require('crypto'); 2 const config = require('../config'); 3 4 module.exports = { 5 // 生成 md5 值 6 md5 (buffer) { 7 const obj = crypto.createhash('md5'); 8 obj.update(buffer + config.md5_keys); 9 return obj.digest('hex'); 10 } 11 };
上一篇: 设计模式之-策略模式
下一篇: 了解【Docker】从这里开始
推荐阅读
-
[PHP]利用XAMPP搭建本地服务器, 然后利用iOS客户端上传数据到本地服务器中(三. PHP端代码实现) - M_Lee
-
最简单ORACLE RAC试验环境搭建
-
MQTT服务器:Apollo搭建步骤(Ubuntu16.04)
-
Win200下PHP服务器的简单配置_PHP
-
Linux服务器开发环境搭建 Nginx+PHP+MongoDB linux 连接mongodb mongodb安装教程 mongod
-
win2000下搭建wamp5服务器【外网不能访问有关问题】紧急
-
Ubuntu中搭建Nginx、PHP环境最简单的方法_PHP
-
nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器
-
邮件服务器怎么搭建?
-
如何搭建一个数据库服务器平台