koa2+mongo 搭建后台 (一)

一、安装启动初始化koa2

1、全局安装koa-generator

npm install -g koa-generator

2、 生成项目基本目录

koa2 hello-koa2

3、进行依赖安装

cd hello-koa2 && npm install

4、启动

npm start

在这里插入图片描述

二、常用中间件

1、koa-json
读取json数据

var json = require('koa-json');
var Koa = require('koa');
var app = new Koa();
 
app.use(json());
 
app.use((ctx) => {
    
    
  ctx.body = {
    
     foo: 'bar' };
});

2、koa-bodyparser
读取请求body 中数据,koa.js并没有内置Request Body的解析器,当我们需要解析请求体时需要加载额外的中间件,官方提供的koa-bodyparser是个很不错的选择,支持x-www-form-urlencoded, application/json等格式的请求体,但不支持form-data的请求体。也就是说不用这个插件,就拿不到post请求传过来的body内容。

var Koa = require('koa');
var bodyParser = require('koa-bodyparser');
 
var app = new Koa();
app.use(bodyParser());
 
app.use(async ctx => {
    
    
  // the parsed body will store in ctx.request.body
  // if nothing was parsed, body will be an empty object {}
  ctx.body = ctx.request.body;
})

3、koa-logger
日志功能

const logger = require('koa-logger')
const Koa = require('koa')
 
const app = new Koa()
app.use(logger((str, args) => {
    
    
  // redirect koa logger to other output pipe
  // default is process.stdout(by console.log function)
}))

4、koa-onerror
异常处理

const fs = require('fs');
const koa = require('koa');
const onerror = require('koa-onerror');
 
const app = new koa();
 
onerror(app);
 
app.use(ctx => {
    
    
  // foo();
  ctx.body = fs.createReadStream('not exist');
});

5、koa-router
路由导航

const router = require('koa-router')()

router.get('/', async (ctx, next) => {
    
    
  await ctx.render('index', {
    
    
    title: 'Hello Koa 2!'
  })
})

6、koa-static
处理静态资源

const serve = require('koa-static');
const Koa = require('koa');
const app = new Koa();
 
// $ GET /package.json
app.use(serve('.'));
 
// $ GET /hello.txt
app.use(serve('test/fixtures'));
 
// or use absolute paths
app.use(serve(__dirname + '/test/fixtures'));
 
app.listen(3000);
 
console.log('listening on port 3000');

7、koa-views
在koa2中使用模板机制必须依靠中间件,最常用的便是koa-views

var views = require('koa-views');
 
const render = views(__dirname + '/views', {
    
    
  map: {
    
    
    html: 'underscore'
  }
})
 
// Must be used before any router is used
app.use(render)

猜你喜欢

转载自blog.csdn.net/cyadyx/article/details/107574830