│ server.js
│
├─libs
│ database.js
│
├─log
├─routers
│ │ static.js
│ │
│ ├─admin
│ │ index.js
│ │
│ ├─api
│ └─www
│ index.js
│
├─static
│ └─upload
├─template
└─upload
cnpm i koa koa-router koa-better-body koa-ejs koa-session mysql co-mysql
在route中键入项目路由 示例 routes/admin/index.js
const Router = require('koa-router');
router = new Router();
router.get('/',ctx=>{
ctx.body='test'
});
module.exports = router.routes();
示例静态资源相关 routes/static.js
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键入项目相关配置 如数据库配置
module.exports={
DB_HOST:'localhost',
DB_USER:'root',
DB_PASS:'root',
DB_NAME:'ches'
}
在libs/database.js键入数据库连接
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安全
/**生成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作为入口文件,进行项目初始如路由注册,中间件,统一处理错误等
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());