个人对nodejs的使用也是从express开始的,从使用express至今也有好几年了,当时都没有好好的去总结下,乘着最近有空重头再看看这个陪伴了我们这么久的好用的express框架。
初始化
express创建项目的方式有两种一种是自己通过npm安装相关插件创建,一种可以通过express生成器来创建。
- 通过npm初始化配置
// 初始化配置文件 npm init
// 安装express npm install express --save
//新建app.js应用文件 let express = require("express"); let app = express(); app.listen(3000,function(err){ console.log("serve is starting:3000!") }) // 运行app.js node app.js
运行是控制台可以看到日志输出,简单的几行代码就能启动一个服务,这正是express(node)方便之处。
- 通过express生成器创建
npm install express-generator -g //express + 目录名 express app cd app npm run start
浏览器打开http://localhost:3000/ 可以看到如下页面
网络异常,图片无法展示
|
路由
express路由是express的核心功能,其路由API有两种一个是express返回的app,另一个是express.Router()返回的可安装的模块化路由处理程序。我们在开发中经常会两者结合使用。
express的基本路由
- 使用方式
let express = require('express'); let app = express(); //结构如下 app.METHOD(PATH,HANDLER)
METHOD
是请求方法主要有:GET POST PUT DELETE PATCH
PATH
是请求路径:字符串 正则
HANDLER
是在路由匹配时执行的函数。
- 路由方法:METHOD
// GET method route app.get('/', function (req, res) { res.send('this is GET'); }); // POST method route app.post('/', function (req, res) { res.send('this is POST'); }); // all表示匹配所有的方法 app.all('/secret', function (req, res, next) { console.log('Accessing the secret section ...'); next(); // pass control to the next handler });
- 路由路径PATH:路由路径与请求方法相结合,用于定义可以在其中提出请求的端点。路由路径可以是字符串、字符串模式或正则表达式。
// 字符串路径,此路径可以看做为完全匹配 app.get('/string', function (req, res) { res.send('string'); });
// 基于字符串模式的路由路径,此路由路径将匹配 `abcd`、`abbcd`、`abbbcd` 等。 app.get('/demo?example', function(req, res) { res.send('demo?example'); });
// 以下是基于正则表达式的路由路径,此路由将匹配demo结尾的所有字符串 app.get(/.*demo$/, function(req, res) { res.send('/.*demo$/'); });
- 补充:链式路由
express的模板路由
使用 express.Router
类来创建可安装的模块化路由处理程序。Router
实例是完整的中间件和路由系统;因此,常常将其称为“微型应用程序”
- 使用方式
let express = require('express'); let 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 about route router.get('/about', function(req, res) { res.send('About birds'); }); module.exports = router;
注意:其路由的方法和路径和express的基本路由规则一致
请求、返回处理
express的请求和返回的对象是路由处理函数的参数也是对nodejs中Request和Response类的封装,一般用来获取请求参数和设置返回内容。
Request
- 常用参数
参数 | 描述 |
req.path | 获取请求路径 |
req.body | 获取请求体中的内容 |
req.params | 获取请求主路径上传递的参数值 |
req.cookies | 获取请求携带的cookie值 |
req.query | 获取请求路径?后的参数 |
- 常用方法
方法 | 描述 |
res.accepts() | 检查是否acceptab指定的内容类型 |
res.get() | 返回指定的HTTP请求报头字段(不区分大小写匹配)。Referrer和Referer字段是可以互换的。 |
Response
- 常用参数
参数 | 描述 |
res.headersSent | 布尔属性,指示应用程序是否为响应发送HTTP报头。 |
res.locals | 实现了模板和路由之间的传参 |
- 常用方法
方法 | 描述 |
res.download() | 提示将要下载文件。 |
res.end() | 结束响应进程。 |
res.json() | 发送 JSON 响应。 |
res.jsonp() | 在 JSONP 的支持下发送 JSON 响应。 |
res.redirect() | 重定向请求。 |
res.render() | 呈现视图模板。 |
res.send() | 发送各种类型的响应。 |
res.sendFile() | 以八位元流形式发送文件。 |
res.sendStatus() | 设置响应状态码并以响应主体形式发送其字符串表示。 |
res.set() | 将响应的HTTP报头字段设置为value。要一次设置多个字段,需要传递一个对象作为参数。 |
总结
本文主要简单的说明了下express的使用,后面的文章将详细介绍express核心功能(路由 中间件 请求/返回)的使用。 参考文档1:express 入门和基础知识