node.js的基本操作(学习笔记二)
目录
一、服务器端基础概念
URL:统一资源定位符,是专门为了识别Internet网上资源而设的一种编址方式。我们之前说的网页地址就是指URL。
URL的组成:

二、创建Web服务器
示例代码:
//引用系统模块
const http = require('http');
//创建Web服务器
const app = http.createServer();
//req --- request的简写,代表请求对象
//res --- response的简写,代表响应对象
app.on('request',(req,res) => {
res.end('<h1>hi,user</h1>');
});
app.listen(3000);
console.log('服务器已经启动3000端口,请访问localhost:3000');
再使用powshell(cmd也行)切换到项目的目录下,使用nodemon 文件名,即可,再打开浏览器,输入localhost:3000就可以看到结果。
注意: 需要下载node的第三方库nodemon!
代码运行结果如下:


三、HTTP协议
1.什么是HTTP协议?

2.报文

3.响应报文与请求报文(2种)
我们随便打开一个网页使用F12,打开调试工具,Headers中就是请求与响应的报文数据(Response Headers是响应,Request Headers是请求)

Response中就是服务器端响应给客户端的具体内容

4.请求报文
(1)请求方法
GET请求 请求数据
POST请求 发送请求 (通常使用这个,安全!!!)
(2)请求地址 (Request URL)
app.on('request', (req, res) => {
req.headers // 获取请求报文
req.url // 获取请求地址
req.method // 获取请求方法
});
有以下两段示例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
</head>
<body>
<!--
method: 指定当前表单的提交方式
action: 指定当前表单的提交位置
-->
<form method="post" action="http://localhost:3000">
<input type="submit" />
</form>
</body>
</html>
//引用系统模块
const http = require('http');
//创建Web服务器
const app = http.createServer();
//req --- request的简写,代表请求对象
//res --- response的简写,代表响应对象
app.on('request',(req,res) => {
if (req.method == 'POST'){
res.end('post!');
}else if (req.method == 'GET'){
res.end('get!');
}
});
app.listen(3000);
console.log('网站服务器启动成功!!!');
注:代码没有什么实际意义,只是本人在学习node时实验的示例,用于理解POST与GET请求!
使用POST与GET如何获取客户端的请求地址???
app.on('request',(req,res) => {
if (req.url == '/index' || req.url =='/'){
res.end("Welcome to homepage!");
}else if (req.url == '/list'){
res.end("Welcome to listpage!");
}else {
res.end("Not Found!");
}
});
想要获取报文?
req.headers // 获取请求报文
如果想要获取具体的某一条:
req.headers['accept']

5.响应报文

四、HTTP请求与响应处理
1.请求参数
客户端向服务器端发送请求时,有时需要携带一些客户信息,客户信息需要通过请求参数的形式传递到服务器端,比如登录操作。
2.GET请求参数
参数被放置在浏览器地址栏中,例如:http://localhost:3000/?name=zhangsan&age=20
参数获取需要借助系统模块url,url模块用来处理url地址
上面的URL中:参数使用“=”来分割键值对,“&”来拼接相邻的键值对。
const http = require('http');
// 导入url系统模块 用于处理url地址
const url = require('url');
const app = http.createServer();
app.on('request', (req, res) => {
// 将url路径的各个部分解析出来并返回对象
// true 代表将参数解析为对象格式
let {query} = url.parse(req.url, true);
console.log(query);
});
app.listen(3000);
3.POST请求参数
参数被放置在请求体中进行传输
获取POST参数需要使用data事件和end事件
使用querystring系统模块将参数转换为对象格式
// 导入系统模块querystring 用于将HTTP参数转换为对象格式
const querystring = require('querystring');
app.on('request', (req, res) => {
let postData = '';
// 监听参数传输事件
req.on('data', (chunk) => postData += chunk;);
// 监听参数传输完毕事件
req.on('end', () => {
console.log(querystring.parse(postData));
});
});
4.路由

// 当客户端发来请求的时候
app.on('request', (req, res) => {
// 获取客户端的请求路径
let { pathname } = url.parse(req.url);
if (pathname == '/' || pathname == '/index') {
res.end('欢迎来到首页');
} else if (pathname == '/list') {
res.end('欢迎来到列表页页');
} else {
res.end('抱歉, 您访问的页面出游了');
}
});
5.静态资源
服务器端不需要处理,可以直接响应给客户端的资源就是静态资源,例如CSS、JavaScript、image文件。
6.动态资源
相同的请求地址不同的响应资源,这种资源就是动态资源。

7.客户端请求途径


浙公网安备 33010602011771号