npm i koa复制代码
npm i koa-router复制代码
const Koa = require('koa');
const Router = require('koa-router');
let app = new Koa();
let router = new Router();
app.get('/',async ctx => {
ctx.body = 'Index Page';
})
app.use(router.routes());
app.listen(3000);复制代码
const Koa = require('koa');
const Router = require('koa-router');
let app = new Koa();
let router = new Router();
let userRouter = new Router();
userRouter.get('/', async ctx=>{
ctx.body = 'user';
})
let company = new Router();
company.get('a',ctx=>{
ctx.body = 'company Page';
})
let admin = new Router();
admin.get('b',ctx=>{
ctx.body = 'admin Page';
})
userRouter.use(company.routes());
userRouter.use(admin.routes());
router.use(userRouter.routes());
app.use(router.routes());
app.listen(3000);复制代码
const Koa = require('koa');
const Router = require('koa-router');
let app = new Koa();
let router = new Router();
app.get('/user/:id',async ctx => {
// 参数能够从ctx中的params中获取
console.log(ctx.params);
//获取id的值
let { id } = ctx.params;
console.log(id);
})
app.use(router.routes());
app.listen(3000);复制代码
urlencoded格式: http://www.baidu.com/user?id=xxxcss
获取urlencoded路由的参数html
const Koa = require('koa');
const Router = require('koa-router');
let app = new Koa();
let router = new Router();
app.get('/user/',async ctx => {
// urlencoded传参数能够从ctx中的query中获取
console.log(ctx.query);
//获取id的值
let { id } = ctx.query;
console.log(id);
})
app.use(router.routes());
app.listen(3000);复制代码
params格式: http:/www.baidu.com/user/12 12=>:idmysql
app.context是app服务中ctx的原型,若是须要添加全局组件,或者全局变量,能够使用app.context来设置全局react
const Koa = require('koa');
const Router = require('koa-router');
let app = new Koa();
// 将数据库设置为全局
app.context.db = mysql.createPool();
let router = new Router();
app.get('/',async ctx => {
ctx.db.query('xxxxxxxx');
})
app.use(router.routes());
app.listen(3000);复制代码
const Koa = require('koa');
const Router = require('koa-router');
let app = new Koa();
// 将数据库设置为全局
app.context.db = mysql.createPool();
let router = new Router();
app.get('/login',async ctx => {
let { username,password } = ctx.query;
if( !username || !password ){
ctx.throw(404,'username and password are required');
}
})
app.use(router.routes());
app.listen(3000);复制代码
const Koa = require('koa');
const Router = require('koa-router');
let app = new Koa();
// 将数据库设置为全局
app.context.db = mysql.createPool();
let router = new Router();
app.get('/login',async ctx => {
ctx.assert(ctx.query.username,404,'username is required');
ctx.assert(ctx.query.password,404,'password is required');
ctx.body= ' success ';
})
app.use(router.routes());
app.listen(3000);复制代码
ctx.state = 404复制代码
ctx.redireact('/register');
ctx.redireact('http://www.baidu.com');复制代码
koa不自带static,须要安装koa-staticsql
npm i koa-static复制代码
const Koa = require('koa');
const Router = require('koa-router');
const static = require('koa-static');
let app = new Koa();
let router = new Router();
app.use(static('./static',{
maxage: 17*86400*100; //缓存时间
index: 'index.html'; //跟文件
})
app.use(router.routes());
app.listen(3000);复制代码
const Koa=require('koa');
const Router=require('koa-router');
const static=require('koa-static');
let server=new Koa();
server.listen(8080);
//
let router=new Router();
router.get('/user', async ctx=>{
});
server.use(router.routes());
let staticRouter=new Router();
staticRouter.all(/(\.jpg|\.png|\.gif)$/i, static('./static', {
maxage: 60*86400*1000
}));
staticRouter.all(/(\.css)$/i, static('./static', {
maxage: 1*86400*1000
}));
staticRouter.all(/(\.html|\.htm|\.shtml)$/i, static('./static', {
maxage: 20*86400*1000
}));
staticRouter.all('', static('./static', {
maxage: 30*86400*1000
}));
server.use(staticRouter.routes());复制代码
koa-better-body可以解析上传的文件以及普通的post数据数据库
const Koa=require('koa');
const Router=require('koa-router');
const body=require('koa-better-body');
let server=new Koa();
server.listen(8080);
server.use(body({
// 文件上传的路径
uploadDir: './static/upload'
}));
server.use(async ctx=>{
//文件和post数据信息都在ctx.request.fields里面
console.log(ctx.request.fields);
ctx.body='aaa';
});
复制代码
koa自带cookienpm
const Koa=require('koa');
const Router=require('koa-router');
let server=new Koa();
server.listen(8080);
// 循环秘钥
server.keys=[
'sdfasdfasdfsadfasddfsdaf',
'gutryurtyhfddyt8uytug',
'tyutryur687tyuyujghjkhj',
];
server.use(async ctx=>{
ctx.cookies.set('user', 'blue', {
signed: true
// 还能够加httpOnly,domain,maxAge等等
});
console.log(ctx.cookies.get('user', {
// 校验cookie
signed: true
}));
});
复制代码
npm i koa-session复制代码
const Koa=require('koa');
const Router=require('koa-router');
const session=require('koa-session');
let server=new Koa();
server.listen(8080);
// 循环秘钥
server.keys=[
'asdfasdfasdfasdfasdf',
'hghjfgjghjkyggfytyurt',
'hjghjkfguig8ygyi8t78i8',
];
server.use(session({
maxAge: 20*60*1000, //有效期
renew: true //自动续期
}, server));
server.use(async ctx=>{
// session信息能够在ctx.session中寻找
if(!ctx.session['view']){
ctx.session['view']=0;
}
ctx.session['view']++;
ctx.body=`欢迎你第${ctx.session.view}次来访`;
});
复制代码
database.js缓存
const mysql=require('mysql');
const co=require('co-mysql');
let conn=mysql.createPool({
host: 'localhost',
user: 'root',
password: '',
database: '20181101'
});
let db=co(conn);
module.exports=db;
复制代码
app.jsbash
const Koa=require('koa');
const Router=require('koa-router');
let server=new Koa();
server.listen(8080);
server.context.db=require('./libs/database');
server.use(async (ctx, next)=>{
try{
let data = await ctx.db.query('SELECT * FROM user');
console.log(data);
}catch(err){
console.log(err);
}
});
server.use(router.routes());复制代码
const Koa=require('koa');
const Router=require('koa-router');
let server=new Koa();
server.listen(8080);
server.context.db=require('./libs/database');
/*
在全部的use以前,处理普通的错误,由于执行了next(),全部下面全部的错误都会在该处被捕获
*/
server.use(async (ctx, next)=>{
try{
await next();
}catch(e){
ctx.body='错了';
}
});
let router=new Router();
/*
在全部路由以前,处理路由错误,* 表示全部路由
*/
router.all('*', async ctx=>{
try{
await next();
}catch(e){
ctx.body='错了-router';
}
});
router.get('/a', async ctx=>{
ctx.body=div.title;
});
server.use(router.routes());
复制代码