前言
Node.js:是一个开源的、跨平台的运行时环境,使用JavaScript语言,开发前/后端代码,创建各种服务器端工具和应用程序。
Express 是一个基于Node.js平台的 Web 应用程序开发框架。
官方文档地址:www.expressjs.com.cn/
Express机制:
- 为不同 URL 路径中使用不同 HTTP 动词的请求(路由)编写处理程序。
- 集成了“视图”渲染引擎,以便通过将数据插入模板来生成响应。
- 设置常见 web 应用设置,比如用于连接的端口,以及渲染响应模板的位置。
- 在请求处理管道的任何位置添加额外的请求处理“中间件”。
起步
mkdir express-demo //创建项目
cd express-demo //进入
npm init //初始化
npm install express //安装express
touch app.js //新建一个app.js文件
hello world
app.js文件
const express = require("express"); //导入express模块
const app = express(); //创建app应用
const port = 3001 //端口号:默认3000
app.get("/", (req, res) => { //监听GET请求
res.send("get say 'Hello World'"); //向客户端响应内容
});
app.listen(port, () => { //启动web服务器
console.log(`启动地址:http://localhost:${port}/`);
});
node app.js //启动app.js文件
网页打开地址:http://localhost:3001/
用Postman工具,测试下接口
nodemon
开发Node.js 项目时,为了方便开发和调试,可使用nodemon启动项目,nodemon可检测文件变化,自动重启项目。node app.js命令,在代码被修改之后,需要手动重启项目。
npm i -g nodemon //安装nodemon
nodemon app.js //启动app.js文件
路由
路由定义:请求的类型、请求的URL地址、处理函数
app.METHOD(path, handle)
// `METHOD` HTTP请求方法(get/post/delete/head/options/put/trace
// `path` 服务器上的路由路径
// `handle(request, response)` 当路由匹配时执行的处理函数
// 参数request和response对象来处理请求和响应的数据
Express,内部使用的还是http模块,只是拓展了HTTP模块中的请求和响应对象。
路由方法:
支持与所有HTTP请求方法相对应的方法
路由路径:
可以是“字符串”,“字符串模式”或“正则表达式”
“字符串”路径:
app.get('/', (req, res) => {}) // 根路由
app.get('/about', (req, res) => {}) // /about
“字符串模式路径”:子符? 、+ 、* 和() 是他们的正则表达式的对应的子集
app.get('/ab?cd', (req, res) => {}) //匹配到/acd和/abcd
app.get('/ab+cd', (req, res) => {}) //匹配到/abcd、/abbcd、/abbbcd等
app.get('/ab*cd', (req, res) => {}) ///abcd、/abxcd、/ab123cd、/abRANDOMcd
// ? 用来匹配前面的子表达式零次或一次
// + 用来匹配前面的子表达式一次或多次(大于等于1次)
// * 用来匹配前面的子表达式任意次
“正则表达式路径”:
app.get(/a/, (req, res) => {}) //匹配到其中带有'a'的任何内容
app.get(/.*fly$/, (req, res) => {}) //匹配到 fly结尾的内容
路由参数
通过req.query对象,获取url中携带的参数
通过req.params对象,获取url中通过匹配到的动态参数
//url地址:http://localhost:3001/home/123/张婷?age=20
app.get('/home/:id/:name', (req, res) => {
console.log(req.params); //{ id: '123', name: '张婷' }
console.log(req.query); //{ age: '20' }
res.send(req.params)
});
路由处理程序
请求对象继承自 http.IncomingMessage
响应对象继承自 http.ServerResponse
request和response对象,相关API参考文档:HTTP | Node.js v14.19.3 Documentation (nodejs.org)
响应方法:(具体见官方文档)
| 方法 | 描述 |
|---|---|
| res.download() | 提示要下载的文件 |
| res.end() | 结束响应过程 |
| res.json() | 发送JSON响应 |
| res.jsonp() | 发送带有JSONP支持的JSON响应 |
| res.redirect() | 重定向请求 |
| res.render() | 渲染视图模板 |
| res.send() | 发送各种类型的响应 |
| res.sendFile() | 将文件作为八位字节流发送 |
| res.sendStatus() | 设置响应状态码,并将其字符串表示形式发送为响应正文 |
路由设计
为了代码整洁性,将所有的路由放到 router 文件夹中,在 app.js 引入。
待更新。