Express–基于Nodejs平台,快速、开放、极简的web开发框架。是一个保持最小规模的灵活的Nodehs web应用程序开发框架,为web和移动应用程序提供一组强大的功能。
1.安装
npm install express --save
- 路由
app.get('/',function(req,res){
res.send('Hello World')
}
app.post
app.put
app.delete
app.all(’/secret’,function(req,res,next):
无论使用get、post、delete、put还是在http模块中支持的其他任何Http请求,都将为针对/secret的请求执行处理程序。
app.get('/'
/about
/eg.txt
/ab?cd ===acd/abcd
/ab+cd ===abcd/abbcd/abbbcd
/ab*cd === ab任意cd
/ab(cd)?e ===ade/abcde
基于正则表达式的路由匹配:
app.get(/a/,
匹配名称中具有'a'的所有路由
app.get(/.*fly$/
匹配以fly胡额为的路由
请求方法Request:
req.app:当callback为外部文件时,用req.app访问express实例;
req.baseUrl:获取路由当前安装的URL路径;
req.body/req.cokkies:获得请求主体/Cookies
req.fresh/req.stale:判断请求是否还新鲜;
req.hostname/req.ip:获取主机名和ip地址;
req.originalUrl:获取原始请求URL;
req.params:获取路由的parameters;
req.pathL获取请求路径;
req.protocol:获取协议类型;
req.query:获取URL的查询参数串;
req.route:获取当前匹配的路由;
req.subdomains:获取子域名;
req.accepts():检查可接受的请求的文档类型;
req.acceptsCharsets/req.acceptsEncodings/req.acceptsLanguages:返回执行字符集的第一个可接受字符编码;
req.get():获取指定的Http请求头
req.is():判断请求头Content-Type的MIME类型;
响应方法Response:
res.app:同req.app
res.append():追加指定http头
res.set():在res.append()后将重置之前设置的头
res.cookie(name,value,[,options]):设置Cookies
option:domain/expires/httpOnly/maxAge/path/secure/signed
res.clearCookie():清除Cookie
res.download():提示将要下载文件
res.get():返回指定的HTTP头
res.end():结束响应进程
res.json():发送json响应
res.jsonp():在jsonp的支持下发送Json响应
res.location():只设置响应的location http头,不设置状态码或者close response
res.redirect():重定向请求,设置响应的location http头,并设置状态码为302
res.render():呈现视图模板,渲染一个view,同时向callback传递渲染后的字符串,如果在渲染过程中有错误发生next(err)将会被自动调用,callback将会被传入一个可能发生的错误及渲染后的页面,这样就不会自动输出了。
res.send():发送各种类型的响应
res.sendFile :以八位元流形式发送文件,自动根据文件extension设定Content-Type
res.sendStatus():设置响应状态码并以响应主体形式发送其字符串表示
res.set():设置http头,传入object可以一次设置多个头;
res.status():设置http状态码
res.type():设置Content-Type的MIME类型。
app.route()为路由路径创建可链接的路由处理程序。因为在单一位置指定路径,所以可以减少冗余和输入错误。
app.route('/book')
.get(function(req,res){
res.send()
})
.post(function(req,res){
res.send()
})
express.Router创建可安装的模块化路由处理程序。Router实例是完整的中间件和路由系统。
-
编写中间件
中间件函数能够访问请求对象req、响应对象res及应用程序的请求/响应循环中的下一个中间件函数,下一个中间件函数通常由名为next的变量来表示。中间件函数可以执行以下任务:
执行任何代码; 对请求和响应对象进行更改 结束请求/响应循环 调用堆栈中的下一个中间件
Express应用程序可以使用以下类型的中间件:
应用层中间件 路由器层中间件 错误处理中间件 express.static(root,[options]) 内置中间件 第三方中间件
-
使用模板引擎
在express可以呈现在模板文件之前,必须设置以下应用程序设置:view:模板文件所在的目录 view engine:要使用的模板引擎。
安装对应模板引擎包:npm install pug --save
-
错误处理
错误处理函数有4个自变量(err,req,res,next)
在其他app.use()和路由调用之后,最后定义错误处理中间件 -
静态文件
express.static(root,[options]) -
常见问题及解答
app.use(function(req,res,next){
res.status(404).send('Sorry can't find that')
})
app.use(function(err,req,res,next){
console.error(err.stack)
res.status(500).send('Something broke! ')
})
-
Express应用程序的进程管理器
使用进程管理器有以下好处:在应用程序崩溃后将其重新启动 获得对运行时性能和资源消耗的洞察 动态修改设置以改善性能 控制集群
用于Express和其他Nodejs应用程序的最流行的进程管理器包括:
StrongLoop Process Manager
PM2
Forever
具体介绍在目录篇章。
-
生产环境最佳实践:安全
使用TLS 使用Helme 安全使用cookie 确保依赖项的安全
具体介绍在目录篇章。
-
生产环境最佳实践:性能和可靠性
代码中的注意事项: 使用gzip压缩:降低响应主体的大小,提高web应用程序的速度。 不使用同步函数:同步函数和方法会阻止进程的运行,直至其返回。 使用中间件提供静态文件 正确进行日志记录 正确处理异常:使用try...catch和promise 环境和设置中的注意事项: 将NODE_ENV设置为:'production':指定运行应用程序的环境。 将NODE_ENV设置为production会使express: 高速缓存视图模板 高速缓存从css扩展生成的css文件 生成简单的错误信息 确保应用程序能够自动重新启动 在集群中运行应用程序 高速缓存请求结果 使用负载均衡器 使用逆向代理