关于nodejs中koa所用的html模板(也就是django的html模板)中 <%Block XXX%>

html-css016

关于nodejs中koa所用的html模板(也就是django的html模板)中 <%Block XXX%>,第1张

如果你已经安装了 uglifyjs (npm install uglify-js),你可以执行下面的命令它会生成所有的文件。其实每一个正式版本里都帮你做了这事。

make jade.min.js

默认情况下,为了方便调试Jade会把模板组织成带有形如 __.lineno = 3 的行号的形式。 在浏览器里使用的时候,你可以通过传递一个选项 { compileDebug: false } 来去掉这个。

使用中间件统一处理错误

有了上面的说明,那现在我们就来看看在 koa 里面怎么优雅的实现统一错误处理。

答案就是使用强大的中间件!

我们可以在业务逻辑中间件(一般就是 MVC 中的 Controller)开始之前定义下面的中间件:

JavaScript

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

app.use(function* (next) {

try {

yield* next

} catch(e) {

let status = e.status || 500

let message = e.message || '服务器错误'

if (e instanceof JsonError) { // 错误是 json 错误

this.body = {

'status': status,

'message': message

}

if (status == 500) {

// 触发 koa 统一错误事件,可以打印出详细的错误堆栈 log

this.app.emit('error', e, this)

}

return

}

this.status = status

// 根据 status 渲染不同的页面

if (status == 403) {

this.body = yield this.render('403.html', {'err': e})

}

if (status == 404) {

this.body = yield this.render('404.html', {'err': e})

}

if (status == 500) {

this.body = yield this.render('500.html', {'err': e})

// 触发 koa 统一错误事件,可以打印出详细的错误堆栈 log

this.app.emit('error', e, this)

}

}

})

可以看到,我们直接执行 yield* next,然后 catch 执行过程中任何一个中间件的错误,然后根据错误的“特性”,分别进行不同的处理。

有了这个中间件,我们的业务逻辑 controller 中的代码就可以这样来触发错误:

JavaScript

1

2

3

4

5

6

7

8

9

10

11

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

router.get('/some_page', function* () {

// 直接抛出错误,被中间件捕获后当成 500 错误

throw new PageError('发生了一个致命错误')

throw new JsonError('发送了一个致命错误')

// 带 status 的错误,被中间件捕获后特殊处理

this.throw(403, new PageError('没有权限访问'))

this.throw(403, new JsonError('没有权限访问'))

})

对 Error 分类

上面的代码里面出现的 JsonError、PageError,实际上是继承于 Error 的两个构造器。代码如下:

JavaScript

1

2

3

4

5

6

7

8

9

10

11

12

13

14

const util = require('util')

exports.JsonError = JsonError

exports.PageError = PageError

function JsonError(message) {

Error.call(this, message)

}

util.inherits(JsonError, Error)

function PageError(message) {

Error.call(this, message)

}

util.inherits(PageError, Error)

通过继承 Error 构造器,我们可以将错误进行细分,从而能更精细的对错误进行处理。

前后端分离,前端nodejs运行环境,使用koa2集成负责资源分配与用户交互,实现token验证用户身份,路由控制。等!

自行 百度 解决;

"program": "${workspaceFolder}\app.js"

此处就是是将app.js作为启动文件。${workspaceFolder}代表根目录,vsc启动时会在根目录下找到并加载app.js文件。

参数介绍: name 项目名称、 version 版本号、 description 项目描述、 main 项目启动文件、 scripts 启动快捷设置, author 作者, dependencies 第3方中间件名称及版本。

最重要的

dependencies ”这里添加一些要用到的包,以上是这次要用到的所有的包,版本自己更改。

scripts ”这里是一些nodejs的便捷命令,上线的时候会用到,直接在终端中,package.json同级目录 ,执行‘npm start’ 即 可启动app.js。

别的没啥太大作用瞎写即可。

启动相关配置,封装到config/init.js中,启动文件直接引用即可

3-6-1、init.js项目核心。

异常友好处理方法封装

路由配置

视图渲染

核心集成

3-6-2、config.js项目参数配置。为什么不用json文件 因为json不能加注释

3-6-3、token.js项目token相关方法封装。

执行后项目结构会增加两个文件

新增

src/hello.js。

views/index.html

浏览器访问: http://127.0.0.1:3000/koa/login

输入值获取token

获取的token如图:

先不用带token进行访问: http://127.0.0.1:3000/koa/ hello/jiaobaba,被token拦截,返回401

带上token访问: http://127.0.0.1:3000/koa/ hello/jiaobaba

测试页面渲染,及跳转html页面,直接访问 http://127.0.0.1:3000/koa /views

结束!!!!!!

需要源码联系我