前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Koa搭建基本服务器

Koa搭建基本服务器

作者头像
切图仔
发布2022-09-14 15:03:17
3660
发布2022-09-14 15:03:17
举报
文章被收录于专栏:生如夏花绚烂
目录结构
代码语言:javascript
复制
│  server.js
│  
├─libs
│      database.js
│      
├─log
├─routers
│  │  static.js
│  │  
│  ├─admin
│  │      index.js
│  │      
│  ├─api
│  └─www
│          index.js
│          
├─static
│  └─upload
├─template
└─upload
基础模块
代码语言:javascript
复制
cnpm i koa koa-router koa-better-body koa-ejs koa-session mysql co-mysql

在route中键入项目路由 示例 routes/admin/index.js

代码语言:javascript
复制
const Router = require('koa-router');

router = new Router();
router.get('/',ctx=>{
    ctx.body='test'
});
module.exports = router.routes();

示例静态资源相关 routes/static.js

代码语言:javascript
复制
const static = require('koa-static');
module.exports = function(router,options){
    options = options||{};
    options.image = options.image||30;
    options.script = options.script||1;
    options.styles = options.styles||30;
    options.html = options.html||30;
    options.other = options.othre||7;
    router.all(/((\.jpg)|(\.png)|(\.gif))$/i,static('./static',{
        maxAge:options.image*86400*1000
    }));
    router.all(/((\.js)|(\.jsx))$/i,static('./static',{
        maxAge:options.script*86400*1000
    }));
    router.all(/((\.css))$/i,static('./static',{
        maxAge:options.styles*86400*1000
    }));
    router.all(/((\.html)|(\.htm))$/i,static('./static',{
        maxAge:options.html*86400*1000
    }));
    router.all(/\*/,static('./static',{
        maxAge:options.other*86400*1000
    }))
}

在config.js键入项目相关配置 如数据库配置

代码语言:javascript
复制
module.exports={
    DB_HOST:'localhost',
    DB_USER:'root',
    DB_PASS:'root',
    DB_NAME:'ches'
}

在libs/database.js键入数据库连接

代码语言:javascript
复制
const mysql = require('mysql');
const co = require('co-mysql');
const config = require('../config')

let conn = mysql.createPool({
    host:config.DB_HOST,
    user:config.DB_USER,
    password:config.DB_PASS,
    database:config.DB_NAME
})

module.exports = co(conn);

项目新键文件ge_key.js用于生成sessionkey保证session安全

代码语言:javascript
复制
/**生成sessionkey */
const fs = require('fs');

const KEY_LEN = 1024;
const KEY_COUNT = 2048;
const CHARS = 'abcdefghijklmnOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890<>?'
let arr = [];
for(let i=0;i<KEY_COUNT;i++){
    let key = ''
    for(let j=0;j<KEY_LEN;j++){
        key+=CHARS[Math.floor(Math.random()*CHARS.length)];
    }
    arr.push(key)
}
fs.writeFileSync('.keys',arr.join('\n'));
console.info(`生成${KEY_COUNT}keys`)

server.js作为入口文件,进行项目初始如路由注册,中间件,统一处理错误等

代码语言:javascript
复制
const Koa = require('koa');
const Router = require('koa-router');
const ejs = require('koa-ejs');
const static = require('./routers/static');
const body = require('koa-better-body');
const path = require('path');
const session = require('koa-session');
const fs = require('fs');
let server = new Koa();
server.listen(3000);
//中间件
//better-body
server.use(body({
    uploadDir:path.resolve(__dirname,'./static/upload')

}))

//session
server.keys = fs.readFileSync('.keys').toString().split('\n');
server.use(session({
    maxAge:20*60*1000,//20分钟过期
    renew:true
},server));
//数据库
server.context.db=require('./libs/database')//ctx的原型
let router = new Router();
//ejs

ejs(server,{
    root:path.resolve(__dirname,'template'),
    layout:false,
    viewExt:'ejs',
    cache:false,
    debug:false

});
//统一处理
// router.use(async(ctx,next)=>{
//     try{
//         await next();
//     }catch(e){
//         // ctx.state=500;
//         // ctx.body = '服务器内部错误'
//         ctx.throw('500','出差了')
//     }
// });
router.use('/admin',require('./routers/admin'));

router.use('/',require('./routers/www'));
static(router,{
    html:365
});

server.use(router.routes());
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录结构
  • 基础模块
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档