时钟服务器案例
1.导入需要的模块
// 引入 path 模块
const path = require('path')
// 引入 fs 模块
const fs = require('fs')
// 引入 http 模块
const http = require('http')
2.创建基本的 web 服务器
// 创建一个服务器
const server = http.createServer()
3.将资源的请求 url 地址映射为文件的存放路径
// 创建一个服务器
const server = http.createServer()
// 给服务器添加 request 事件
server.on('request', (req, res) => {
// 获取客户端请求 url地址
let url = req.url
let fpath = ''
// 判断 url 的值
if (url === '/') {
fpath = path.join(__dirname, url, './code/index.html')
} else {
fpath = path.join(__dirname, './code', url)
}
})
4.读取文件内容并相应给客户端
// 读取客户端请求的文件
fs.readFile(fpath, 'utf8', (err, dataStr) => {
// 判断是否读取到了内容
if (err) return res.end('404 is not found')
// 将读取到的内容 相应给客户端
res.end(dataStr)
})
5.启动服务器
// 启动服务器
server.listen(80, () => console.log('server running at http://127.0.0.1'))
完整代码展示:
// 引入 path 模块
const path = require('path')
// 引入 fs 模块
const fs = require('fs')
// 引入 http 模块
const http = require('http')
// 创建一个服务器
const server = http.createServer()
// 给服务器添加 request 事件
server.on('request', (req, res) => {
// 获取客户端请求 url地址
let url = req.url
let fpath = ''
// 判断 url 的值
if (url === '/') {
fpath = path.join(__dirname, url, './code/index.html')
} else {
fpath = path.join(__dirname, './code', url)
}
// 读取客户端请求的文件
fs.readFile(fpath, 'utf8', (err, dataStr) => {
// 判断是否读取到了内容
if (err) return res.end('404 is not found')
// 将读取到的内容 相应给客户端
res.end(dataStr)
})
})
// 启动服务器
server.listen(80, () => console.log('server running at http://127.0.0.1'))
注意:
打印每次的 url地址
第一次的url地址为:
第二次的url地址为: /index.css
第三次的url地址为: /index.js
因为每次的url地址都不一样 所以要读取的路径不能写死
当请求的文件文件中还有其他的文件,服务器也会根据路径请求其他文件,最典型的就是 html文件中引入 css样式文件 和 js脚本文件,这样会请求三次,并且三次的url地址都不同