- 一、Node服务器开发
- 1、学习服务器开发的目的
- 2、服务器的主要工作
- 3、使用Node创建服务器示例
- 4、http协议:(Hyper Text Transfer Protocal)超文本传输协议
- 5、关于HTTP请求和响应
(1)可以和后端程序员进行紧密的配合
(2)让业务前置
(3)扩展知识面
(1)实现项目的业务逻辑
(2)实现数据的增删改查操作(CRUD)[C-增加,R-查询,U-修改,D-删除]
(3)Node.js开发服务器的优势?
●Node.js是前端开发人员转向后端开发人员的极佳途径
●一些公司要求前端工程师掌握Node.js开发
●Node,js生态系统活跃,有大量开源库可以使用
●前端开发工具大多基于Node.js开发
(4)用Node.js来代替传统的服务端语言(如Java、 PHP语言等) ,开发服务端的网站应用。客户端和服务器端网站开发流程:
(1)引入http模块
(2)创建服务器对象
(3)定义请求和响应
(4)监听端口号
本地机的域名:localhost=== 本地机的IP地址:127.0.0.1(域名和ip地址是一 一对应关系)
☀️举个例子:
//1、引入http模块
const http=require('http')
//2、创建服务器对象
var app=http.createServer()
//3、定义请求和响应
//回调函数的参数:
//req(request):表示请求对象,存放了客户端的所有请求信息
//res(response):表示响应对象,服务器端通过该对象向客户端发送响应信息
app.on('request',(req,res)=>{
res.end('hello!!!')//end()方法:断开与客户端的联系同时向客户端发送信息
})
//4、监听端口号:指定服务器所使用的端口号
app.listen(8089)
console.log('服务器已启动,工作在8089端口上')
4、http协议:(Hyper Text Transfer Protocal)超文本传输协议
(1)HTTP协议规定了如何从网站服务器传输超文本到本地浏览器。
(2)HTTP协议基于客户端服务器架构工作,是客户端(用户)和服务器(网站)请求和应答的标准。
(3)HTTP协议可以使浏览器更加高效,是网络传输减少。
(4)HTTP协议不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
5、关于HTTP请求和响应(1)请求消息:客户端向服务器发送请求时所携带的数据块。
(2)响应消息:服务器端响应客户端请求时所携带的数据块。
(3)客户端向服务器端发送请求的类型
a、get请求:在浏览器的地址栏直接输入请求地址或在页面使用超链接,浏览器将默认发送get请求。
b、post请求:在
☀️举例说明(get请求):
客户端:
Document
服务器端:
//1、引入http模块
const http = require('http')
//2、创建一个服务器对象
const server=http.createServer()
//3、给服务器上绑定一个请求事件,服务器接收响应来做出相应的反应应答
server.on('request',(req,res)=>{
console.log('请求方式:',req.method)
res.end('Hello User')
})
//4、启动服务器,再给服务器一个端口号,监听5000端口上的信息
server.listen(8086)
console.log('服务器已经在8086默认端口上启动')
可以看到有两次请求方式:
第一次是客户端发送请求,form表单的请求method方式为get请求方式;
第二次是服务器端向客户端响应信息发送的隐含的默认方式为get方式。
☀️举例说明(post请求):
客户端:
Document
服务器端(同上):
可以看到有两次请求方式:
第一次是客户端发送请求,form表单的请求method方式为post请求方式;
第二次是服务器端向客户端响应信息发送的隐含的默认方式为get方式。
(4)get请求和post请求的区别
| get请求 | post请求 |
|---|---|
| get请求的参数是通过URL进行传递。 | post请求的参数包含在请求体中。 |
| get请求不安全,不能用来传输敏感信息 | post请求相对比较安全 |
| get请求在url中传递的参数是有长度限制的(不同的浏览器限制的长度不同) | post请求对长度没有限制 |
| get请求参数会被完整的保留在浏览器的历史记录中 | post请求参数不会再浏览器中保留 |
| get请求使用url编码(百分号编码) | post请求支持多种编码方式。 |
| get请求在浏览器中可以被主动缓存(cache); | post请求不会 |
| get请求在浏览器回退时是无害的(回退就是浏览器左上方那个会退箭头) | post请求在浏览器回退时会再次向服务器提交数据(小缺点,效率比get请求慢,因为要将数据打向服务器再次包发送数据) |
| get请求时浏览器会把请求头(http header)和数据(data)一起发送出去; | post请求时浏览器会先发送请求头(http header),服务器响应后(状态码100),浏览器会再次发送数据(data),服务器器会给客户端返回状态码200 |
(5)服务器收到用不同请求方式发送的请求时,如何分开处理(服务器如何区分get请求和post请求)
方法:通过对请求对象(request)的method属性进行判断,来获取用户的请求方式
☀️举例说明:
//1、引入http模块
const http=require('http')
//2、创建服务器对象
var app=http.createServer()
//3、定义请求和响应
//回调函数的参数:
//req(request):表示请求对象,存放了客户端的所有请求信息
//res(response):表示响应对象,服务器端通过该对象向客户端发送响应信息
app.on('request',(req,res)=>{
if(req.method=='POST'){
res.end('post')
}else if(req.method=='GET'){
res.end('get')
}
})
//4、监听端口号:指定服务器所使用的端口号
app.listen(8089)
console.log('服务器已启动,工作在8089端口上')
请求方式为get,返回结果为get
请求方式为post,返回结果为post
(6)根据客户端的请求地址访问不同的内容
方法:通过对请求对象(request)的url属性来获取用户的请求地址
//1、引入http模块
const http=require('http')
//2、创建服务器对象
var app=http.createServer()
//3、定义请求和响应
//回调函数的参数:
//req(request):表示请求对象,存放了客户端的所有请求信息
//res(response):表示响应对象,服务器端通过该对象向客户端发送响应信息
app.on('request',(req,res)=>{
let url=req.url//获取客户端的请求地址
if(url=='/index'||url=='/'){//'/'表示的服务器的根目录
res.end('Home Page')
}else if(url=='/list'){
res.end('List Page')
}else{
res.end('Not Found')
}
})
//4、监听端口号:指定服务器所使用的端口号
app.listen(8089)
console.log('服务器已启动,工作在8089端口上')
输出结果:
默认客户请求方式为get请求,所以直接输入url参数在搜索框:
有以下三种页面显示:
(7)获取请求头信息
①请求头是请求信息的一部分,是由客户端浏览器自动发送给服务器的
②请求头的详细信息
a、格式:以键值对的方式保存
b、属性:
| 属性 | 属性说明 |
|---|---|
| User-Agent | 发送请求的浏览器的类型 |
| Accept | 服务器响应消息的格式 |
| Accept-Language | 客户端可以接收的语言 |
| Accept-Encoding | 客户端可以接收的编码压缩格式 |
| Accept-Charset | 可接收的应答的字符集 |
| Host | 请求的主机名 |
| connection | 连接方式(close 或keepalive) |
c、获取请求头信息的方法
req.headers
//1、引入http模块
const http=require('http')
//2、创建服务器对象
var app=http.createServer()
//3、定义请求和响应
//回调函数的参数:
//req(request):表示请求对象,存放了客户端的所有请求信息
//res(response):表示响应对象,服务器端通过该对象向客户端发送响应信息
app.on('request',(req,res)=>{
const headers = req.headers
console.log(headers)
})
//4、监听端口号:指定服务器所使用的端口号
app.listen(8089)
console.log('服务器已启动,工作在8089端口上')
(8)响应消息
在响应消息中,对于客户端的每一次请求, 服务器端都要给予响应,在响应的时候我们可以通过状态码告诉客户端此次请求是成功还是失败。
状态代码由3位数字组成,表示请求是否被理解或被满足。HTTP响应状态码的第一个数字定义了响应的类别,后面两位没有具体的分类,第1位数字有5种可能的取值。
a、状态码
| 状态码 | 说明 |
|---|---|
| 1** | 请求已接收,需要继续处理 |
| 2** | 请求已成功被服务器接收、理解. eg: 200 表示请求响应成功 |
| 3** | 为完成请求,客户端需进一步细化请求 |
| 4** | 客户端的请求有错. eg:404 请求的服务器资源不存在 |
| 5** | 服务器端出现错误 |
b、响应内容的类型(Content-Type)
text/plain:返回纯文本格式的内容
text/html:返回HTML格式
text/ CSS:返回CSS格式
application/javascript:返回JavaScript格式
image/jpeg:返回JPEG图片格式
application/json:返回JSON代码格式
☀️举个例子:
//1、引入http模块
const http = require('http')
//2、创建一个服务器对象
const server=http.createServer()
//3、给服务器上绑定一个请求事件,服务器接收响应来做出相应的反应应答
server.on('request',(req,res)=>{
res.writeHead(200,{
'content-type':'text/html;charset=utf8'//表示响应信息的格式
})
res.end('你好,我是服务器端。')//end()方法:断开与客户端的联系同时向客户端发送信息
})
//4、启动服务器,再给服务器一个端口号,监听5000端口上的信息
server.listen(8086)
console.log('服务器已经在8086默认端口上启动')



