阅读 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 快速教程的更多相关文章

  1. Python快速教程 尾声

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 写了将近两年的Python快速教程,终于大概成形.这一系列文章,包括Python基 ...

  2. 【Python大系】Python快速教程

    感谢原作者:Vamei 出处:http://www.cnblogs.com/vamei 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容很多,加上各种标准库.拓展库, ...

  3. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    这次博客园的排版彻底残了..高清版请移步: https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程: 给深度学习入门者的Python快速教程 - 基础篇 给深度 ...

  4. 给深度学习入门者的Python快速教程 - numpy和Matplotlib篇

    始终无法有效把word排版好的粘贴过来,排版更佳版本请见知乎文章: https://zhuanlan.zhihu.com/p/24309547 实在搞不定博客园的排版,排版更佳的版本在: 给深度学习入 ...

  5. Python快速教程目录(转)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容 ...

  6. Python快速教程 尾声(转)

    原文地址: http://www.cnblogs.com/vamei/p/3603046.html 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留 ...

  7. 发布《Linux工具快速教程》

    发布<Linux工具快速教程> 阶段性的完成了这本书开源书籍,发布出来给有需要的朋友,同时也欢迎更多的朋友加入进来,完善这本书: 本书Github地址:https://github.com ...

  8. Python快速教程

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容 ...

  9. AFNnetworking快速教程,官方入门教程译

    AFNnetworking快速教程,官方入门教程译 分类: IOS2013-12-15 20:29 12489人阅读 评论(5) 收藏 举报 afnetworkingjsonios入门教程快速教程 A ...

随机推荐

  1. SHOI 2009 会场预约 平衡树 STL练习

    题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...

  2. yum常用命令

    Yum list kmod-coretemp[查找kmod-coretemp模块状态] Yum clean all[清空yum缓存] Yum remove kmod-coretemp [卸载kmod- ...

  3. PHP-PHP-FPM的max_children一些误区

    现在nginx + fpm 基本成为主流的配置,其中我们比较关注的是pm.max_chindren的配置 首先,我们关注一个前提设置: pm = static/dynamic, 这个选项是标识fpm子 ...

  4. 远程调试js注意事项

    1:使用host切换工具,先注释掉93服务器的地址,打开链接,点击高级选项,进去后登陆账号密码(如果不行重启浏览器): 2:进入后,增加93服务器上的host地址,重启浏览器,css样式生效: 3:使 ...

  5. SDDC-SDN-SDS

    SDDCSDNSDS软件定义存储是一个较大的行业发展趋势,这个行业还包括软件定义网络(SDN)和软件定义数据中心(SDDC). SDDC依赖于虚拟化和云计算技术, SDDC的目标是虚拟化数据中心的一切 ...

  6. mongodb 3 常用命令操作

    操作命令详见,这个归类很好,有些教程乱麻麻的 http://www.tuicool.com/articles/j2ueau db.createUser({user:"zhihuiroot&q ...

  7. Svg path画线(不管是直线还是曲线)在一定情况下线条的宽度不一的情况(记录)

    在项目中涉及到svg: 使用path划线实现图表功能. 记录在实现的过程中发现的问题:path在小像素的情况下画出的线条宽度不一样.这是为什么呢? 以下是我做的猜想: 可以看图 在宽度给的很足的时候没 ...

  8. 安装 SQL Server 2008 时提示需要删除 SQL Server 2005 Express 工具

    已安装 SQL Server 2005,安装 SQL Server 2008 时提示需要删除 SQL Server 2005 Express 工具 错误提示:已安装 SQL Server 2005 E ...

  9. Android引用项目出现ClassNotFoundException

    Android中在引用其他工程,尤其是github中的相关库时,如果引用关系设置的不对,很容易出现ClassNotFoundException,例如下面的异常信息 07-26 12:47:51.549 ...

  10. Inno Setup制作安装包的几个问题

    1. 卸载时,如何判断应用程序是否运行    InnoSetup 提供变量AppMutex,用来保存应用程序的Mutex名称.现在很多应用程序都是唯一实例运行.这样避免配置文件被错误修改以及其他很多衍 ...