一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情。
创建 web 服务器的基本步骤
导入 http 模块
const http = require('http')
创建 web 服务器实例
const server = http.createServer()
为服务器实例绑定 request 事件,监听客户端请求
为服务器实例绑定 request 事件,即可监听客户端发过来的网络请求
//为服务器实例绑定 request 事件,监听客户端的请求
server.on('request',(req, res) => {
//只要有客户端来请求我们自己的服务器,就会触发 request 事件,从而调用这个事件处理函数
console.log('有人访问我们的网络服务器')
})
启动服务器
调用服务器实例 .listen() 方法,即可启动当前的 web 服务器实例
//调用 server.listen(端口号, callback 回调)方法,即可启动 web 服务器
server.listen(80, function(){
console.log('HTTP服务器运行在http://127.0.0.1.80')
})
示例
const http = require('http')
const server = http.createServer()
server.on('request',(req, res) => {
console.log('有人访问网络服务器')
})
server.listen(80, function(){
console.log('HTTP服务器运行在http://127.0.0.1.80')
})
log:
[Running] node "/Users/user/Desktop/WS/node/nodeserver.js"
HTTP服务器运行在http://127.0.0.1:80
有人访问网络服务器(每次请求每次打印此log)
有人访问网络服务器
有人访问网络服务器
req 请求对象
- 只有服务器接收到客户端的请求,就会调用通过
server.on()为服务器绑定的 request 事件处理函数 - 如果想在事件处理函数中,访问与客户端相关的数据或属性,可以使用如下方式
const http = require('http')
const server = http.createServer()
server.on('request',(req, res) => {
//req 是请求对象,它包含了与客户端相关的数据和属性如 客户端地址及请求类型等等
const url = req.url
const method = req.method
const str = `请求链接是 ${url},你的请求方法是 ${method}`
console.log(str)
})
server.listen(80, function(){
console.log('HTTP服务器运行在 http://127.0.0.1.80')
})
log:
HTTP服务器运行在 http://127.0.0.1.80
请求链接是 /,你的请求方法是 GET(每次请求每次打印此log)
请求链接是 /,你的请求方法是 GET
请求链接是 /,你的请求方法是 GET
res 响应对象
-
在服务器的 request 事件处理函数中,如果想访问与服务器相关的数据或属性可以使用如下方式
-
通过调用
res.end()方法,向客户端发送指定的内容,并结束这次请求的处理过程const http = require('http') const server = http.createServer() server.on ('request',(req,res) =>{ //res 是响应对象,它包含了与服务器相关的数据和属性 const url = req.url const method = req.method const str = `请求链接是 ${url},你的请求方法是 ${method}` // 向客户端发送指定的内容 res.end(str) }) server.listen(80, function(){ console.log('HTTP服务器运行在 http://127.0.0.1.80') })log:(通过浏览器访问)
-
解决中文乱码问题
-
当调用
res.end()方法,向客户端发送中文内容的时候,会出现乱码问题,此时,需要手动设置内容的编码格式 -
调用
res.setHeader()方法,设置Content-Type响应头,解决中文乱码的问题
const http = require('http') const server = http.createServer() server.on ('request',(req,res) =>{ const url = req.url const method = req.method const str = `请求链接是 ${url},你的请求方法是 ${method}` //设置 Content-Type 响应头 res.setHeader('Content-Type', 'text/html; charset=utf-8') res.end(str) }) server.listen(80, function(){ console.log('HTTP服务器运行在 http://127.0.0.1.80') })log:(通过浏览器访问)
-
根据不同的 url 响应不同的 html 内容
-
核心步骤
- 获取请求的 url 地址
- 设置默认的响应内容为 404 Not found
- 判断用户请求的是否为 / 或 /index.html 首页
- 判断用户请求的是否为 /about.html 关于页面
- 设置
Content-Type响应头,防止中文乱码 - 使用
res.end()把内容响应给客户端
-
示例
const http = require('http') const server = http.createServer() server.on('request',(req, res) =>{ //1.获取请求的 url 地址 const url = req.url //2.设置默认的响应内容为 404 Not found let content = '<h1>404 Not found </h1>' //判断用户请求的是否为 / 或 /index.html 首页 //判断用户请求的是否为 /about.html 关于页面 if (url === '/' || url === '/index.html'){ content = '<h1> 首页 </h1>' }else if (url === '/about.html'){ content = '<h1> 关于 </h1>' } //设置 `Content-Type` 响应头,防止中文乱码 res.setHeader('Content-Type', 'text/html; charset=utf-8') //使用 `res.end()` 把内容响应给客户端 res.end(content) }) server.listen(80, () => { console.log('HTTP服务器运行在http://127.0.0.1.80') }) -
不同的链接对应的log: