复习
练习:
2.1 创建 web 服务器, 监听端口 8080, 接收浏览器的请求, 根据请求做出不同的响应
/login 响应内容 this is login page
/reg 响应内容 this is reg page
/study 跳转 http://www.163.com0
fs 模块
stat/mkdir/rmdir/readdir/wirteFile/appendFile/readFile
unlink/createReadStream/createWriteStream
http 协议
通用的头信息: 请求头/请求URL/响应状态码
响应头信息: 文件类型/压缩类型gzip/
请求头信息
请求主体
http 模块
模拟浏览器/发请求、
http.get(url, function(response) {
response.on("data", function(chunk) { });
})
- 创建 web 服务器
let app = http.createServer();
app.listen(8080);
app.on("request", function(request, response) {
// request.url/method/headers
// response.write/writeHead(302, {})/end()
});
压缩
- 使用 zlib 模块对服务器端响应压缩
//1.1 引入 zlib 模块
const zlib = require("zlib");
//1.2 内容压缩形式
"Content-Encoding": "gizp"
//1.3 创建 gzip 压缩
let gzip = zlib.createGzip();
//1.4 使用读取流读取文件并响应到浏览器
fs.createReadStream("tmooc.html").
pipe(gzip).
pipe(response);
express
基于 nodejs 平台,快速、开放、极简的 web 开发框架
www.expressjs.com.cn
安装 express
npm install express
- 创建 web 服务器
//引入 express 模块
const express = require("express");
//创建 web 服务器
let app = express();
//监听端口
app.listen(8080);
(1) 路由
浏览器向web服务器发请求, web服务器根据 请求的url 和 请求的方法 做出响应
三要素: 请求的 url, 请求的方法, 响应(回调函数)
response 响应对象
send() 设置并发送响应的内容, 路由中只能使用一次
sendFile() 响应文件, 要求使用绝对路径 __dirname
redirect() 响应的重定向, 跳转到另一个 url
request 请求对象
method 请求的方法
url 请求的url
headers 请求的头信息
query 获取请求的查询字符串, 格式为对象
params 获取路由传递的参数
```javascript
//设置路由中接收数据的名称
app.get("/shopping/:price", function(request, reponse) {
request.params; //获取传递的数据, 格式为对象
});
//浏览器传递数据
//http://127.0.0.1:8080/shopping/4999
```
练习: 创建路由, 请求方法: get 请求 url:/admin
传递用户名(uname)和密码(upwd), 接收传递数据, 并响应到浏览器中
练习:使用 express 来创建 web 服务器, 创建路由, 请求方法: get, 请求url: /login, 响应一个文件 login.html 到浏览器端
- 获取 post 请求的数据
```javascript
request.on("data", function(data) {//通过事件
data.toString //格式为字符串, 需要解析为 对象
});
```
- GET 和 POST 请求
在浏览器的地址栏输入 url, 默认就是 GET 请求, 传递数据使用查询字符串, 浏览器记录可能被浏览器缓存
POST 请求需要使用表单提交来完成(现阶段), 获取数据使用使事件
模块
商品模块 product
列表 删除 修改
product/list product/delete product/updata
用户模块 user
列表 删除 修改
user/list user/delete user/updata
(2)路由器
路由在使用的过程中, 不同模块下路由可能出现相同的 url;
把同一个模块下的路由, 放到特定的路由器下来防止这种 url 重复
1. 创建路由器
```javascript
const express = require("express");
//1. 创建路由器对象
let router = express.Router();
//2. 向路由器中添加路由
router.get("/list", function(request, response) {
response.send("这是用户列表");
});
//3. 导出路由器对象
module.exports = router;
```
2. 在 web 服务器中使用
```javascript
const express = require("express");
//1. 引入路由器模块
const userRouter = require("./04_user");
//2. 使用路由器, 挂载到特定的 url
app.use("/user", userRouter);
```
课后任务
- 整理思维导图
- 练习: 创建 web 服务器, 创建一个商品路由器, 添加路由, 挂载到 /product
- 复习 mysql 的 SQL 语句