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 ... 
随机推荐
- ie7中ul不能嵌套div和li平级
			我要讲一个忧伤的故事,本以为清晰的层次结构,ul里不能嵌套div和li平级,不然会乱乱乱! 代码: <ul class="catshow"> ... 
- LEETCODE —— Binary Tree的3 题 ——  3种非Recursive遍历
			Binary Tree Preorder Traversal Given a binary tree, return the preorder traversal of its nodes' valu ... 
- PetaPoco  批量插入数据
			网上找的代码,还没经过验证 /// <summary> /// Bulk inserts multiple rows to SQL /// </summary> /// < ... 
- 观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式
			观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 抽象主题(Subject):它把所有观察者对 ... 
- web编程
			展示层 html/css/javascript/jquery/jquery easyUI/ajax bootstrap web层 varnish/haproxy/squid----lvs/keepal ... 
- 从网易与淘宝的font-size思考前端设计稿与工作流 (转)
			从网易与淘宝的font-size思考前端设计稿与工作流 阅读目录 1. 问题的引出 2. 简单问题简单解决 3. 网易的做法 4. 淘宝的做法 5. 比较网易与淘宝的做法 6. 如何与设计协作 7 ... 
- C++ 取得系统当前时间
			#include <time.h> //* 方法一 time_t tt = time(NULL);//这句返回的只是一个时间cuo tm* t= localtime(&tt); p ... 
- 转载: 查看HADOOP中一个文件有多少块组成及所在机器ip
			看文件信息 hadoop fsck /user/filename 更详细的 hadoop fsck /user/filename -files -blocks -locations -racks ... 
- Android应用开发-数据存储和界面展现(二)(重制版)
			SQLite数据库 // 自定义类MyOpenHelper继承自SQLiteOpenHelper MyOpenHelper oh = new MyOpenHelper(getContext(), &q ... 
- Javascript模式(第三章字面量与构造函数)------读书笔记
			一 对象字面量 1.1对象字面量的语法 1,对象键值对哈希表,在其他的编程语言中称之为“关联数组”, 2 键值对里面的值,可以是原始类型也可以是其他类型的对象,称之为属性,函数称之为方法 3 自定义对 ... 
