express 快速教程
阅读 express 官方文档的记录.
hello world example
var express = require('express')
var app = express()
app.get('/', function(req, res) {
res.send('Hello World')
})
app.listen(3000, function() {
console.log('Example app listening on port 3000!')
})
Routing
路由定义:
app.METHOD(PATH, HANDLER), METHOD 为 HTTP 请求方法, PATH 为路由路径, HANDLER 路由回调函数, 参数为 req, res.
METHOD 还可以为 all, 它的回调函数多一个 next, 作为中间件的功能.
Route paths
路由路径可以为字符串, 字符串模式(?, +, *, () 分别对应正则)以及正则表达式
Route parameters
路由参数是 URL 中的被捕获的特殊位置的片段, 可以通过 req.params 对象获取
app.get('/users/:userId/books/:bookId', function(req, res) {
url = "http://localhost:3000/users/34/books/8989"
req.params = {
userId: "34",
bookId: "8989"
}
})
// 路径参数名字只能为[A-Za-z0-9_]中的字符
// 因此可以使用 '-', '.' 提供一些特殊的功能
app.get('/flights/:from-:to', function(req, res) {
url = 'http://localhost:3000/flights/SH-BJ'
req.params = {
from: 'SH',
to: 'BJ'
}
})
app.get('/plantae/:genus.:species', function(req, res) {
url = 'http://localhost:3000/plantae/Prunus.persica'
req.params = {
genus: 'Prunus',
species: 'persica'
}
})
Route handlers
可以提供多个路由回调函数, 其中一些可以提供类似中间件的功能处理请求, 但是必须要调用 next 以调用下一个回调函数.
Response methods
express 的路由回调函数中的 res 必须调用一下方法以结束请求响应:
- download
- end
- json()
- jsonp
- redirect
- render
- send
- sendFile
- sendStatus
app.route()
使用 app.route() 可以对一个路由链式调用不同的 HTTP 请求
app.route('/book')
.get(function(req, res) {
res.send('Get a random book')
})
.post(function(req, res) {
res.send('Add a book')
})
.put(function(req, res) {
res.send('Update the book')
})
express.Router
express.Router 可以创建一个路由处理模块
var express = require('express');
var router = express.Router();
// middleware that is specific to this router
router.use(function timeLog(req, res, next) {
console.log('Time: ', Date.now());
next();
});
// define the home page route
router.get('/', function(req, res) {
res.send('Birds home page');
});
// define the about route
router.get('/about', function(req, res) {
res.send('About birds');
});
module.exports = router;
以中间件的方式使用 express.Router
var birds = require('./birds')
app.use('/birds'', birds)
中间件
express 中的中间件就是处理 req, res, next 的函数, 中间件函数一般处理模式为:
- 执行任意代码
- 对 req 和 res 进行修改
- 结束 req - res cycle
- next 调用下一个中间件
app 级中间件
app.use 以使用中间件
app.use(function(req, res, next) {
// some code
next()
})
// 对特定路由使用中间件
app.use('/user', function(req, res, next) {
// some code
next()
})
Router 级中间件
Router 级中间件的使用方法和 app 级的相似, 只不过中间件函数绑定在 express.Router 对象上
错误处理中间件
错误处理中间件函数与普通中间件的区别是错误处理多一个参数
app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something broke!');
});
内置中间件
从 express 4.0 版本起, 内置中间件只有一个 express.static
Static
express 内置 express.static(root, ['options']) 中间件处理静态文件.
app.use(express.static('public')) // Express 使用相对路径, 因此 public 不需要在 url 中
app.use(express.static('files')) // 可以使用多个静态中间件, 按照先后顺序查找文件
app.use('/static', express.static('public')) // 添加静态路径到 url 中
第三方中间件
模版
express 默认的模版引擎为 Pug
设置
app.set('views', './views') // 设置模版文件所在目录
app.set('view engine', 'pug') // 如果需要使用其他模版
使用
// 读取模版目录中的 filename 文件, 用 obj 替换模版中的变量
res.render(filename, obj)
Debug
代理设备
express 快速教程的更多相关文章
- Python快速教程 尾声
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 写了将近两年的Python快速教程,终于大概成形.这一系列文章,包括Python基 ...
- 【Python大系】Python快速教程
感谢原作者:Vamei 出处:http://www.cnblogs.com/vamei 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容很多,加上各种标准库.拓展库, ...
- 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV
这次博客园的排版彻底残了..高清版请移步: https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程: 给深度学习入门者的Python快速教程 - 基础篇 给深度 ...
- 给深度学习入门者的Python快速教程 - numpy和Matplotlib篇
始终无法有效把word排版好的粘贴过来,排版更佳版本请见知乎文章: https://zhuanlan.zhihu.com/p/24309547 实在搞不定博客园的排版,排版更佳的版本在: 给深度学习入 ...
- Python快速教程目录(转)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容 ...
- Python快速教程 尾声(转)
原文地址: http://www.cnblogs.com/vamei/p/3603046.html 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留 ...
- 发布《Linux工具快速教程》
发布<Linux工具快速教程> 阶段性的完成了这本书开源书籍,发布出来给有需要的朋友,同时也欢迎更多的朋友加入进来,完善这本书: 本书Github地址:https://github.com ...
- Python快速教程
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容 ...
- AFNnetworking快速教程,官方入门教程译
AFNnetworking快速教程,官方入门教程译 分类: IOS2013-12-15 20:29 12489人阅读 评论(5) 收藏 举报 afnetworkingjsonios入门教程快速教程 A ...
随机推荐
- compile vim with lua & python support
vim在macosx 10.9默认没有带lua和python支持,因为装的有些插件是lua写的,有些是python写的,运行不起来,于是决定自己编译一个,下载vim源码,执行以下命令就可以编译vim: ...
- EX:The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
EX:The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secu ...
- RabbitMQ3.6.3集群搭建+HAProxy1.6做负载均衡
目录 [TOC] 1.基本概念 1.1.RabbitMQ集群概述 通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服 ...
- C#固定时间执行指定事件(观察者模式+异步委托)
最近有个项目需要每天固定的时间去执行指定的事件,发现网上关于这样的文章比较少,而且比较散.通过学习了几篇文章后终于实现了这个功能,在此也特别感谢这些文章的作者们,这也是我第一次在园子里面发文章,望多指 ...
- mysql内存使用以及优化中需要的几点注意
1.从内存中读取数据是微秒级别的.而从磁盘读则是毫秒级别的.二者相差一个数量级.所以想优化数据库,第一个要做到的就是优化io. 2.key_buffer_size[global]设置的内存区域大小缓存 ...
- [2014.01.27]WFsoft.wfLibrary.wfVerifyImage 1.8
全新开发的验证码图片控件--WFsoft.wfLibrary.wfVerifyImage,使用简单,功能强大. 完全支持.net 2.0编写,对下一代操作系统平稳过渡. 同时支持.ne ...
- NVMe over Fabrics:概念、应用和实现
对于大部分人来说,NVMe over Fabrics(简称NVMf)还是个新东西,因为其第一个正式版本的协议在今年6月份才发布.但是这并不影响人们对NVMf的关注,因为这项依托于NVMe的技术很可能继 ...
- Python 文件常见操作
# -*-coding:utf8 -*- ''''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname() ...
- 为了体验 ILS 在Win2012R2 Hyper-V上安装Windows 2000 AdvSer
Win2012 R2 Hyper-V 的集成服务包已不支持Windows 2000 先安装SP4.IE6.更新汇总包,再来安装这个. 安装完成后,会有几个未知设备,直接禁用就可以了. 开启Window ...
- C++的隐式类型转换与转换操作符
C++标准允许隐式类型转换,即对特定的类,在特定条件下,某些参数或变量将隐形转换成类对象(创建临时对象).如果这种转换代价很大(调用类的构造函数),隐式转换将影响性能.隐式转换的发生条件:函数调用中, ...