express官网学习笔记
npm init 创建一个package.json
npm install express --save-dev 安装到项目依赖 便于多人开发 路由结构定义
app.METHOD(PATH, HANDLER);
假定app是一个express的实例 app = express();
METHOD 是某个HTTP请求方式之一
PATH 是服务器端的路径
HANDLER 是当路由匹配到时 需要执行的函数 托管静态文件 图片 css js
app.use(express.static("public"))
访问 localhost:3000/img/hha.png 将静态资源文件所在的目录作为参数传递给express.static中间件就可以提供静态资源文件了
可以多次使用 依次访问
app.use(express.static("public"))
app.use(express.static("static"))
存放虚拟目录
app.use("/static", express.static("public"));
访问 localhost:3000/static/img/hha.png 路由详解
app.use("/", callback);
特殊的路由方法 没有一种http请求与其对应
作用
对于一个路径上的所有请求加载中间件
可以做一些基本的校验 路由路径
字符串路径请求
/ 匹配根路径
/about 匹配/about路径请求
/random.text 匹配random.text路径请求
字符串模式路径请求
/ab?cd 匹配acd 和 abcd 问号 一个或者零个
/ab+cd 匹配abcd abbcd 加号 一个或者多个
/ab*cd 匹配abcd abxcd ab scjsf cd 等 * 任意字符 可以没有
/ab(cd)?e 匹配abe abcde 问号 一个或者零个
正则匹配路径
/a/ 匹配任何含有a的路路径
/.*fly$/ 匹配 $以fly结尾 *有或者没有字符 响应方法
响应对象的方法向客户端返回响应 终结请求响应的循环 不响应 客户端请求挂起直到请求超时
res.download() 提示下载文件
res.end() 终结响应处理流程
res.json() 发送一个JSON格式的响应
res.jsonp() 发红一个JSONP的JSON格式响应
res.redirect() 重定向请求
res.render() 渲染视图模版
res.send() 发送各种类型的响应
res.sendFile() 以八字节流的形式发送文件
res.sendStatus() 设置响应状态码 并将其以字符串的形式作为响应体的一部分发送
app.route()
创建链式路由
app.route("/book")
.get(callback)
.post(callback)
.put(callback);
express.Router
可用express.Router类创建模块化 可挂载的路由句柄
myapp 的router文件夹下birds.js 中间件
中间件是一个函数 可以访问 req res 和web中出于请求和响应环节流程中间的中间件
中间件如果没有终结请求-响应循环 必须调用next()方法将控制权交给下一个中间件 功能
执行任何代码
修改请求和响应对象
终结请求-响应循环
调用堆栈中的下一个中间件
中间件分类
应用级中间件
应用级中间件绑定到app对象 使用 app.use() app.METH() //没有挂在路径的中间件 应用的每个请求都会执行该中间件
app.use(function(req, res, next){}) //挂载到/user/:id的中间件 任何指向/user/:id的请求都会执行他
app.use("/user/:id", function(req, res, next){}) //路由和句柄函数(中间件系统), 处理指向/user/:id的get请求
app.get("/user/:id", function(req, res, next){}) 如果需要在中间件中跳过剩余中间件 可调用next("route")方法将控制权交给下一个路由
路由中间件
效果和应用中间件相同
next("route") //跳过中间件 跳到下一个路由
错误处理中间件
四个参数 err, req, res, next
必须是四个参数 不然会认为是普通中间件
内置中间件
只有一个 express.static(root, [option])
应用可以设置多个静态目录
option 是一个对象 拥有如下属性
dotfiles: 是否对外输出文件以(.)开头的文件 可选值 allow deny ignore
etag: 是否启动etag生成
extensions: 设置文件扩展名备份选项
index: 发送目录文件索引 设置为false时禁用目录索引
lastModified: 设置last-Modified头为文件在操作系统上的最后修改日期 值为 boolean
maxAge: 以毫秒或字符串格式设置 Cache-Contorl头的max-age属性
redirect: 当路径为目录时 重定向dao/
setHeaders: 设置HTTP头以提供文件的函数
第三方中间件
var cookieParser = require("cookie-parser
加载用于解析cookie的中间件
app.use(cookieParser()); 模版引擎
需要设置views view engine才能让Express渲染模版引擎
views 放模版文件的目录 app.set("views", "./views")
view engine 模版引擎 app.set("view engine", "jade")
安装模版引擎npm软件包
npm install jade --save-dev
view engine 设置成功之后 就不需要指定引擎 或者应用中加载模版引擎模块
app.set("view engine", "jade");
index.jade
html
head
title!= title
body
h1 #{title}
创建一个路由渲染index.jade文件 如果没有设置 view engine 需要指明视图文件的后缀 否者会遗漏
app.get("/", function(req, res){
res.render("index", {title:"express jade"});
}) 错误处理
app.use(logErrors); next()
app.use(clientErrorHandler); next()
app.use(errorHandler);
调试Express
DEBUG=express:* node index.js 可以查看所有日志
DEBUG=express:router 只查看路由部分的日志
DEBUG=express:application 只查看应用部分的日志 DEBUG=http,mail,express:* node index.js 通过逗号隔开的名字列表来指定多个调试命名空间 注意:
中间件(路由 应用中间件)如果没有终结请求-响应循环 必须调用next()方法将控制权交给下一个中间件
express官网学习笔记的更多相关文章
- React官网学习笔记
欢迎指导与讨论 : ) 前言 本文主要是笔者在React英文官网学习时整理的笔记.由于笔者水平有限,如有错误恳请指出 O(∩_∩)O 一 .Tutoial 篇 1 . React的组件类名的首字母必须 ...
- Spring boot 官网学习笔记 - logging
commons-logging和slf4j是java中的日志门面,即它们提供了一套通用的接口,具体的实现可以由开发者自由选择.log4j和logback则是具体的日志实现方案. 比较常用的搭配是com ...
- Spring boot 官网学习笔记 - Spring Boot 属性配置和使用(转)-application.properties
Spring Boot uses a very particular PropertySource order that is designed to allow sensible overridin ...
- Spring boot 官网学习笔记 - Spring DevTools 介绍
想要使用devtools支持,只需使用dependencies将模块依赖关系添加到你的构建中 运行打包的应用程序时,开发人员工具会自动禁用.如果你通过 java -jar或者其他特殊的类加载器进行启动 ...
- Spring boot 官网学习笔记 - Auto-configuration(@SpringBootApplication、@EnableAutoConfiguration、@Configuration)
Spring Boot auto-configuration attempts to automatically configure your Spring application based on ...
- Spring boot 官网学习笔记 - Configuration Class(@import)
推荐使用 Java-based configuration ,也可以使用xml we generally recommend that your primary source be a single ...
- Spring boot 官网学习笔记 - Using Spring Boot without the Parent POM,但是还要使用Parent POM提供的便利
If you do not want to use the spring-boot-starter-parent, you can still keep the benefit of the depe ...
- Spring boot 官网学习笔记 - 开发第一个Spring boot web应用程序(使用mvn执行、使用jar执行)
Creating the POM <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...
- Spring boot 官网学习笔记 - Spring Boot CLI 入门案例
安装CLI https://repo.spring.io/release/org/springframework/boot/spring-boot-cli/2.1.1.RELEASE/spring-b ...
随机推荐
- 在Ubuntu14.04上搭建自己的OpenVPN服务器并通过它上网
背景 学校宿舍端口可以配置静态IP连校内网,也可以连到实验室的服务器:实验室的服务器可以连外网:但宿舍要连外网就要花钱买PPPoE账号了.作为壮哉我大计院的一员,本着发扬专(neng)业(sheng) ...
- Python 的编码格式
[前言] Python的编码格式对于初学者来说是很头疼的一件事,不过如果接触的多了,就会发现,只要在恰当的时候使用了恰好的编码,就不会出现太多的问题. [编码介绍] python 的编码格式2.x 和 ...
- Transact-SQL参考--学习笔记
基本的就不累赘了. 运算符 除法: dividend / divisor 如果用一个整数的 divisor 去除整数的 dividend,其结果是一个整数,小数部分被截断,如果要有小数可以将divid ...
- MFC中属性表单和向导对话框的使用
每次在使用MFC创建一个框架时,需要一步步选择自己的程序的外观,基本功能等选项,最后MFC会生成一个基本的程序框架,这个就是向导对话框:而属性表单则是另外一种对话框,表单上有多个属性页,每点击某一页, ...
- 五分钟学习React(一): 什么是React
在前端的世界里,我们要处理的文件不是太多,而是太少.每天开发项目将html.css.js.图片.字体文件都像大杂烩一般加载都网页上.当应用变得越来越臃肿的时候,会发现js用了那么多全局变量,css的继 ...
- C#学习笔记-策略模式
题目:做一个商场收银的小程序,可能会出现的情况包括:正常收费,九折优惠,七折优惠,满300减50等各种不同随时会变化的优惠活动. 界面如下: 分析: 首先我们对于收钱写一个父类CashSuper.这个 ...
- C#学习笔记-装饰模式
题目:给顾客打扮,但是需要满足正常的穿衣风格,例如先穿了衬衣再打领带,最后在穿鞋子,这种基本要求. 分析: 现在将具体的衣服裤子和鞋子都分别写在不同的类里面,这样方便以后添加新的衣服,这些全部都属于服 ...
- 微信公众号问题:{"errcode":40125,"errmsg":"invalid appsecret, view more at http:\/\/t.cn\/LOEdzVq, hints: [ req_id: kL8J90219sg58 ]"}
在调试微信公众号授权登录时遇到了这个错误,着实是心烦了半天,公众号相关开发以前是经常做的,很久没有接触了,而且遇到了这么个以前没遇到的问题. {"errcode":40125,&q ...
- 读了前半本<Thinking in Java>
读了1-14章.这本书真的不适合初学者,可能比较适合有一两年Java经验的人来读.学习真的是一个螺旋递进的过程.刚开始学Java基本语法,书上看到的很多东西觉得过于细枝末节,没见过,用不上,导致书看不 ...
- Machine Learning - week 3
Classification 使用线性回归来分类,会很不准确.并且,它的范围也会超出 {0, 1}.所以使用下面的逻辑回归模型. Hypothesis representation 线性回归中 hθ( ...