手记

【九月打卡】第9天 Node.js开发博客——Koa2简介、介绍路由、实现session

课程信息

课程名称: Node.js+Express+Koa2+开发Web Server博客
课程章节: 第6章 博客项目之登录
课程讲师: 双越

课堂笔记

1、Koa2简介

1.基本特点

(1)express中间件是异步回调,koa2原生支持async/await(而express不支持)。
(2)新开发的框架和系统,都基于koa2,例如:egg.js。
(3)express虽然未过时,但是koa2肯定是未来趋势。

Egg.js 是什么? - 为企业级框架和应用而生
https://eggjs.org/zh-cn/intro/

2.课程基本目录

async/await语法介绍,安装和使用koa2。
开发接口,连接数据库,实现登录,日志记录。
分析koa2中间件原理。

3.async await

1、await后面可以追加promise对象,获取resolve的值。
2、await必须包裹在async函数里面。
3、async函数执行返回的也是一个promise对象。
4、try-catch截获promise中的reject。

4.使用脚手架安装

全局安装:npm i koa-generator -g
创建脚手架:koa2 blog-koa2(之后再进入文件夹中,再npm i安装)

5.安装nodemon

使用nodemon监测文件变化,自动重启node。
使用cross-env设置环境变量,兼容mac、linux和windows。
具体操作:
安装nodemon和cross-env:npm i nodemon cross-env --save-dev
在package.json中配置:
“scripts”: {
“start”: “node bin/www”,
“dev”: “cross-env NODE_ENV=dev ./node_modules/.bin/nodemon bin/www”,
“prd”: “cross-env NODE_ENV=production pm2 start bin/www”,
“test”: “echo “Error: no test specified” && exit 1”
},
开启koa2:npm run dev,访问地址:http://localhost:3000

2、文件说明

1.文件夹目录

/bin/www:启动server的文件,在里面可以修改端口号
/public:与前端相关的静态文件
/routes/index.js:路由配置文件
/views:前端的模板

2.app.js文件说明

const Koa = require('koa')
const app = new Koa()
// 对应的是views文件夹
const views = require('koa-views')
// postData中JSON格式处理的
const json = require('koa-json')
// 错误处理
const onerror = require('koa-onerror')
const bodyparser = require('koa-bodyparser')
// 日志处理
const logger = require('koa-logger')
// 路由处理(引入路由)
const index = require('./routes/index')
const users = require('./routes/users')
const blog = require("./routes/blog")
const user = require("./routes/user")

// 错误监测
onerror(app)

// app.use:注册中间件
app.use(bodyparser({
  enableTypes:['json', 'form', 'text']
}))
app.use(json())
app.use(logger())

// 下面这两段代码与前端有关
app.use(require('koa-static')(__dirname + '/public'))
app.use(views(__dirname + '/views', {
  extension: 'pug'
}))

// logger
app.use(async (ctx, next) => {
  const start = new Date()
  // next()实质上是一个async函数,返回的是promise对象,写成看似同步的方法
  await next()
  // 当前请求的耗时
  const ms = new Date() - start
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})

// 路由处理(注册路由)
app.use(index.routes(), index.allowedMethods())
app.use(users.routes(), users.allowedMethods())
app.use(blog.routes(), blog.allowedMethods())
app.use(user.routes(), user.allowedMethods())

// 错误处理
app.on('error', (err, ctx) => {
  console.error('server error', err, ctx)
});

module.exports = app
0人推荐
随时随地看视频
慕课网APP