Koa2 框架
基于 Node.js 的 Web 开发框架。由 Express 原班人马打造。
koa 依赖于 co 的模式,而 koa2 完全抛弃了 generator 和 co 的做法,使用 async/await 来做异步开发。
企业级 nodejs 的 web 框架 egg.js 等框架就是在 koa2 的基础上研发
关于框架
本笔记只记录基础,详细的框架用法请左转其官方文档。
访问 index.html
用 koa2 展示写好的静态网页文件(index.html),复制这段代码,安装好依赖后在 node 上运行
javascript
const Koa = require("koa2")
const static = require("koa-static")
const Router = require("koa-router")
const cors = require("@koa/cors")
const fs = require("fs")
const {
join
} = require("path")
const app = new Koa()
const router = new Router()
app.use(static(join(__dirname, "static")))
router.get("/index", async (ctx, next) => {
/**
* 不适用router模块的时候,如此处
* 返回页面参数要带上最后一个参数utf8
* 否则会进去默认是二进制 是下载html文件
*/
ctx.body = fs.readFileSync(join(__dirname, "index.html"), "utf8")
})
app.use(cors())
app.use(router.routes()).use(router.allowedMethods()).listen(80)
至此,可以使用 127.0.0.1/index,来访问静态网页文件 index.html 中的内容了
ejs 模板渲染
ejs 是 node.js 的 ssr 模板语法之一,你也可以使用 pug 等来作为模板语言,编辑器一般都支持甚至不需要插件。
javascript
const Koa = require("koa2")
const static = require("koa-static")
const router = require("./routers/router") //单独的一个Router文件
const cors = require("@koa/cors")
const fs = require("fs")
const {
join
} = require("path")
const render = require("koa-ejs")
const bodyParser = require("koa-bodyparser")
//生成Koa实例
const app = new Koa()
//配置静态资源目录 可以用根路由指代static目录
app.use(static(join(__dirname, "static")))
app.use(bodyParser())
//配置ejs模板文件放在views目录下
render(app, {
root: join(__dirname, "views"),
layout: "layout", // 所有的模板都是混入到layout.html中
viewExt: "html", // 如果不配置这个 所有的模板包括layout默认会是.ejs后缀
cache: false,
debug: false,
})
//允许跨域请求
app.use(cors())
//注册路由信息
app.use(router.routes()).use(router.allowedMethods()).listen(80)
使用 .ejs
作为模板文件的后缀,但编辑器无高亮的时候,可以像上面这样配置 viewExt 使后缀依然用 .html
注意事项
设置 cookie 的时候不能包含中文,否则会报错
解决办法
javascript
ctx.cookies.set("username", (new Buffer(username)).toString('base64'),...
相应的 session 在验证时的解码:
javascript
ctx.session = {
username: (new Buffer(ctx.cookies.get("username"), 'base64')).toString(),
...
在 windows 系统开发的时候,还需要注意文件名大小写的问题,它会被忽略而导致部署到其他平台出错。