将相册项目(中)继续升级,最终使用 Express 版本。
封装 render 渲染函数
- 获取模板字符串中需要的数据
- 获取模板字符串
fs.readFile('文件名');
- 将模板字符串中用到的数据和模板字符串通过模板引擎整合到一起
_.template(模板字符串)({数据对象});
- 发送响应
res.end(_.template(模板字符串)({数据对象}));
render(‘文件路径’, ‘数据对象’);
render(‘index’, ‘数据对象’);
综上所述,封装的具体代码如下:
|
|
handler.js
|
|
router.js
|
|
Express
Express 是一个基于 Node.js 开发的快速、开放、极简的 Web 开发框架,可以用来快速构建网站后台,使用 Express 可以让你更加专注于业务的处理。
- Koa
- Sails
- ThinkJS
特性
- Express框架建立在node.js内置的http模块上
- 不对 Node.js 已有的特性进行二次抽象
- 在 HTTP 模块之上扩展了 Web 应用所需的基本功能,例如:
req.query
、res.send
、res.json
、res.render
等API - 原来的 HTTP 模块的
req.url
、req.method
,res.write
,res.end
等 API 依然存在
- 轻量、API简单友好
- 简单语义化的路由系统
- 强大的中间件处理系统
Geting Started
- 安装
- hello world
- 路由
- 处理静态资源
安装:
|
|
基本路由及基本使用:
|
|
处理静态资源:
|
|
express 版的 相册
views 目录下
views 目录下 index.html
|
|
views 目录下 album.html
|
|
根目录
config.js
|
|
app.js
|
|
router.js
|
|
handler.js
|
|
路由系统模块
Express 中提供了一种路由模块化的方式,具体使用形式就是可以将路由单独的放到一个模块中,然后通过 app.use
的形式加载路由系统。
中间件
如果把一个 http
处理过程比作是污水处理,中间件就像是一层层的过滤网(过滤器)。每个中间件在 http
处理过程中通过改写 request
或(和)response
的数据、状态,实现了特定的功能。
简单说,中间件(middleware)就是处理HTTP请求的函数。它最大的特点就是,一个中间件处理完,再传递给下一个中间件。App 实例在运行过程中,会调用一系列的中间件。
中间件的功能包括:
- 执行任何代码。
- 修改请求和响应对象。
- 终结请求-响应循环。
- 调用堆栈中的下一个中间件。
中间件函数
每个中间件可以从App实例,接收三个参数,依次为:
- request对象(代表HTTP请求)
- response对象(代表HTTP回应)
- next回调函数(代表下一个中间件)
每个中间件都可以对HTTP请求(request对象)进行加工,并且决定是否调用next方法,将request对象再传给下一个中间件。
|
|
中间件常用 API
app.use(handler)
- 任何请求方法、路径都会进入该中间件,然后执行里面的代码
app.use([path], handler)
- 只有指定的请求路径,才会进入该中间件,然后执行里面的代码
app.get(path, handler)
- 只有 get 请求,并且是指定的请求路径,才会执行该中间件
app.post(path, handler)
- 只有 post 请求,并且是指定的请求路径,才会执行该中间件
常用第三方中间件
使用第三方中间件的步骤一般如下:
第一步 npm install --save 中间件名称
第二步:看文档,找到 example
,然后 try-try-see
Express 中的错误处理
这是从框架、代码层面的解决。
程序运行异常的解决。
如何记录错误日志
API
express()
- express() 类似于 http.createServer,得到一个 Server 实例对象
- express.static(‘公共资源目录路径’) 处理静态资源
- express.Router([options]):创建路由实例对象
- 得到一个 router 实例
- 给 router 挂载路由处理函数 get、post、
- 然后就可以通过
app.use
的形式加载这个 router 实例
Application
- app.locals
- res.download(path [, filename] [, fn])
- res.end([data] [, encoding])
- res.json([body])
- res.jsonp([body])
- res.redirect([status,] path)
- res.render(view [, locals] [, callback])
- res.send([body])
- res.sendFile(path [, options] [, fn])
- res.sendStatus(statusCode)
- res.set(field [, value])
- res.status(code)
- res.type(type)
- ‘Content-Type’
|
|
Request
- router.all(path, [callback, …] callback)
- router.METHOD(path, [callback, …] callback)
- get
- post
- router.param([name,] callback)
- router.route(path)
- router.use([path], [function, …] function)
中间件插件 API
- 安装插件
- 加载插件
- 使用插件 API
关于中间件。
|
|
express 支持使用字符串模式的路由路径
req.pramers 来取得路径的参数 如路径 article/:5
, 是一个对象,里面可以获取到当前路径的参数