koa2的脚手架,默认模板引擎是jade。如果想用art-template或者是ejs的模板的同学可以点击这个链接koa脚手架,拉去使用即可。
地址分享
koa_api:拉去下来,运行直接使用即可。
koa脚手架:搭建好的koa脚手架,使用art-template模板引擎,或者ejs
npm init --yes
cnpm install koa koa-router --save
const Koa = require('koa');
const Router = require('koa-router')
// 创建一个Koa对象表示web app本身:
const app = new Koa();
const router = new Router();
//配置路由
app.use(router.routes()).use(router.allowedMethods());
const port = process.env.PORT || 5000;
router.get('/', async ctx => {
ctx.body = {msg:'hellow koa'}
})
// 对于任何请求,app将调用该异步函数处理请求:
app.use(async (ctx, next) => {
await next();
ctx.response.type = 'text/html';
ctx.response.body = '<h1>Hello, koa2!</h1>';
});
// 在端口3000监听:
app.listen(port);
console.log(`app started at port ${port}`);
art-template,速度非常快,推荐使用。
cnpm install --save art-template
cnpm install --save koa-art-template
const render = require('koa-art-template')
render(app,{
root:path.join(__dirname,'view'),
extname:'.art',
debug:process.env.NODE_ENV !== 'production'
})
npm install koa-view --save
npm install ejs --save
const views = require('koa-views')
app.use(view(__dirname,{extension:'ejs'})) //
await ctx.render('index.html')
<%= title %> //变量
<% array.forEach(element => { %>
<%= element %>
<% }) %> //遍历
<% include public/header.ejs %> //引入模板
<%- element %> //变量(会解析HTML)
<% if(num>24) { %> //判断
<% }else{ %>
<% } %>
cnpm install koa-static --save
const serve = require('koa-static')
app.use(serve(__dirname + '/static'))
cookie保存在浏览器。
koa中无法使用中文cookie,使用Buffer解决。
ctx.cookies.set('userInfo','zhangsan'.{
maxAge:60*1000*24 //过期时间
path:'/news' //配置可以访问的cookie路径
domain:'.baidu.com' //正常情况不需要设置
httpOnly:true; //这个cookie只有服务器才能访问。 false表示浏览器服务器都可以使用cookie、
overwrite
})
ctx.cookies.get('userInfo')
console.log(new Buffer('hellow,word!').toString('base64'))
console.log(new Buffer('aGVsbG8sIHdvcmxkIQ==','base64').toString())
cnpm install koa-session --save
var session = require('koa-session')
app.keys = ['some secret hurr']
const CONFIG = {
key: 'koa.sess', /** 默认 */
maxAge: 86400000, //过期时间
autoCommit: true, /** (boolean) automatically commit headers (default true) */
overwrite: true, /** (boolean) can overwrite or not (default true) */
httpOnly: true, /** ture表示只有服务器可以获取session */
signed: true, /** 默认 签名 */
rolling: false, /** 每次请求强行设置我们的session */
renew: true, /** 每次操作,就会重新设置时间*/
secure: true, /** (boolean) secure cookie*/
sameSite: null, /** (string) session cookie sameSite options (default null, don't set it) */
};
app.use(session(CONFIG, app));
ctx.session.userInfo = '张三' //设置
ctx.session.userinfo //获取
cnpm install mongose --save
mongose.connect('url',,{ useNewUrlParser: true })
.then((res) => {
console.log('链接成功')
})
.catch((res) => {
console.log('数据库链接失败')
})
koa的路由配置使用koa-router
cnpm install koa-router --save
const router = require('koa-router')()
//get 获取参数
router.get('/test',async (ctx) => {
//直接使用
console.log(ctx.query) //{ aid: '123' } 获取的是对象 用的最多的方式 **推荐
console.log(ctx.querystring) //aid=123&name=zhangsan 获取的是一个字符串
//使用request
console.log(ctx.request.query); //{ aid: '123', name: 'zhangsan' } 对象
console.log(ctx.request.querystring); //aid=123&name=zhangsan
})
app.use(router.routes(),router.allowedMethods()) //启动路由 router中有一个方法routes方法,执行这个方法会把router中所有的路由添加到项目上。
request可以不写,用法类似与window.document 可以直接写document。
使用post的方法,需要引入。koa-bodyparser这个包
cnpm install koa-bodyparser --save
完成后可以在,ctx中的request的body属性中拿到值。(这个包会把post请求前端传递过来的数据添加到ctx的request属性上。在ctx上不能访问)
安装bcrypt.js
cnpm i bcryptjs
const bcrypt = require('bcryptjs')
//哪里需要需要加密这段代码就放在哪里
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash('需要加密的内容', salt, (err, hash) => {
console.log(hash) //加密后的hash值
newUser.password = hash
});
});
cnpm i gravatar --save
const gravatar = require('gravatar')
const avatar = gravatar.url(ctx.request.body.email, {s: '200', r: 'pg', d: 'mm'});
cnpm i jsonwebtoken --save
const payload = {id: user.id,name:user.name,avatar:user.avatar} //需要传递的参数
const token = jwt.sign(payload,"secret",{expiresIn:3600}); //进行token配置,参数、密钥、时间
ctx.status = 200;
ctx.body = {success:true , token: 'Bearer ' + token}
安装
cnpm i koa-passport --save
安装
cnpm i passport-jwt
validator
安装
cnpm i validator
koa中的中间件
app.use(async (ctx,next) => {
console.log(new Date());
await next()
})
router.get('/news',async (ctx,next) => {
await next()
})
app.use(async (ctx,next) => {
console.log(new Date());
await next()
if(status == 404){
ctx.body = {message:'找不到页面'}
}
})
脚手架默认模板引擎是jade
为了帮同学们更好的理解前后端交付这里我给大家封装了一个接口。拉去下来直接使用即可。api