目录
一、日常啰嗦
昨天和大家一起分享了一下http模块基本的一些概念,像什么是客户端、服务端、什么是IP地址、域名和域名服务器还有IP地址和域名,以及端口号一些基本的东西,今天呢想和大家分享创建一个最基本的web服务器,和大家介绍一下创建服务器的基本命令,还有req和res的概念和示例。
二、创建最基本的web服务器
1.基本步骤
创建最基本的web服务器需要四个步骤,分别是
①导入http模块
②创建web服务器实例
③为服务器实现绑定request事件,监听客户端的请求
④启动服务器
2.具体实现
①导入http模块
我们上次分享说到我们自己的电脑可以是一个服务器也可以是一个客户端,所以如果希望在自己电脑上创建一个web服务器,从而对外提供web服务,我们则需要导入http模块,并为它命名。(一般情况下我们导入的是什么,名字就命名为什么。像导入fs模块就命名为fs,导入path模块就命名为path,导入http模块就命名http)这也是我们创建服务器需要的第一条语句:
const http = require('http')
②创建web服务器实例
在导入http模块后我们需要 调用http.createServer()方法,快速创建一个web服务器实例,并为它命名。调用语句为:
const server = http.createServer()
③为服务器实现绑定request事件,监听客户端的请求
在我们调用完http.createServer()方法以后呢,就创建好了一个服务器,就得为服务器绑定request事件,用来监听客户端发送过来的网络请求。
在这一步中我们需要调用".on()"方法,为服务器绑定request事件,在客户端请求我们服务器时,就回触发request事件,然后会console出“Someone visit our web server.”
“.on(’request‘,function)”中有两个参数,第一个是“request”,在绑定request事件是必须要写的,第二个为function函数,function中必须要有req及res两个参数
代码中“server.on('request',(req,res) =>{}”等同于“server.on('request',function(req,res) =>{}”
我们来写一下这个代码吧。
// 导入http模块
const http = require('http')
// 调用http.createServer()方法,快速创建一个web服务器
const server = http.createServer()
// 使用服务器实例.on()方法,为服务器绑定一个request事件
server.on('request',(req,res) =>{
// 只要由客户端来请求我们自己的服务器,就回触发request事件,从而调用这个事件处理函数
console.log('Someone visit our web server.')
})
④启动服务器
绑定完request事件后,我们只需要调用“server.listen()”方法,即可启动web服务器。
“server.listen(端口号,cb回调)“中端口号为80时,“http://127.0.0.1/80”后的“/80”可省略,其他端口号不可。
“127.0.0.1”是回送地址,在代码测试期间“http://127.0.0.1”指本地机,若端口号为除80外的其他端口号,则需要在后面添加“/xx”
// 导入http模块
const http = require('http')
// 调用http.createServer()方法,快速创建一个web服务器
const server = http.createServer()
// 使用服务器实例.on()方法,为服务器绑定一个request事件
server.on('request',(req,res) =>{
// 只要由客户端来请求我们自己的服务器,就回触发request事件,从而调用这个事件处理函数
console.log('Someone visit our web server.')
})
// 调用.listen()方法,即可启动当前web服务器实例
server.listen(80,() =>{
console.log('http server running at http://127.0.0.1')
})
三、运行
代码写完后,我们可以打开cmd或者PowerShell窗口输入“node 空格 ./xx.js”进行运行
会出现一个回送地址,我们将“http://127.0.0.1”复制在浏览器打开
会发现这个圈圈它会一直在转,因为我们没有在网页里填写内容,所以它一直都会这样,但是我们重新打开运行程序的cmd或者PowerShell窗口,会发现 出现了新的一句话
就是客户端发送请求触发了request事件,然后打印出了这句话。到现在我们最基本的web服务器已经完全完成了。
注意:
web服务器在终端窗口运行时按住“CTRL+c”用来结束运行,若不结束,重新创建的服务器无法运行,
重新出现文件路径就是结束运行
四、req请求对象
只要服务器接收到了客户端的请求,就回调用通过server.on()为服务器绑定的request 事件处理函数,如果想在事件处理函数中,访问与客户端相关的数据与属性,可以使用如下的方式:
server.on('request',(req) =>{
const str = `Your request is ${req.url},and request method is ${req.method}`
console.log(str)
})
将上述代码放进我们web服务器中
// 导入http模块
const http = require('http')
// 调用http.createServer()方法,快速创建一个web服务器
const server = http.createServer()
// 使用服务器实例.on()方法,为服务器绑定一个request事件
server.on('request',(req,res) =>{
// 只要由客户端来请求我们自己的服务器,就回触发request事件,从而调用这个事件处理函数
console.log('Someone visit our web server.')
})
//req.url是客户端请求的url地址
const url = req.url
//req.method是客户端的method请求类型
const method = req.method
server.on('request',(req) =>{
const str = `Your request is ${url},and request method is ${method}`
console.log(str)
})
// 调用.listen()方法,即可启动当前web服务器实例
server.listen(80,() =>{
console.log('http server running at http://127.0.0.1')
})
这里的引号不是单引号!!!是tab键上面的小波浪键,键盘切换到英文点小波浪键就会出现,这里用单引号会提示错误。
在cmd或者PowerShell窗口运行,并复制链接在浏览器打开,会看到一个空白页面,还是因为我们 没有在这里面些内容,但是终端会发生变化
这里的“/”表示根路径,同时我们请求的类型是get请求,因为浏览器只能发起默认的get请求。
这就是我们的req请求对象。
五、res响应对象
只需要把上面代码中sever.on()命令改成一下代码
server.on('request',(req,res) =>{
// req.url是客户端请求的url地址
const url = req.url
//re.method是客户端的method请求类型
const method = req.method
const str = `Your request is ${req.url},and request method is ${req.method}`
// console.log(str)
res.end(str)
})
终端除了用cmd和PowerShell窗口外还可以使用vscode中的终端 ,vscode中最上面的导航栏里由终端这一选项,点开会有一个新建终端,点一下新建终端会在下面出现终端界面。
终端页面直接将我们的文件目录准备好了,就直接运行"node 空格 ./xx.js "命令,或者空格完以后输入文件前几个字母tab键切换就行。
我们运行一下看看结果
出现以后我们鼠标放到链接处, “ctrl+鼠标左键”会直接进入http://127.0.0.1页面
在我们打开页面的同时终端会发生变化相应我们设置的那句话,同样页面也会出现内容。
这就是我们res响应对象了。
等疫情结束了,我们一起约去旅游吧,去几个一直非常想去但是没有去的地方,吃遍那里所有的美食,和朋友爱人拍一堆堆照片来弥补我们这几年的遗憾。
今天想和大家分享的歌曲是:
你就不要想起我
祝:
晚安,好梦!