什么是 web 服务器?
当应用程序(客户端)需要某一个资源时,可以向一个台服务器,通过Http请求获取到这个资源;提供资源的这个服务器,就是一个Web服务器;
目前有很多开源的Web服务器:Nginx、Apache(静态)、Apache Tomcat(静态、动态)、Node.js
使用 http 创建基本的web服务器
可以在终端中使用 node 地址 来运行
// 1. 导入 http 模块 const http = require('http') // 2. 创建 web 服务器实例 const server = http.createServer() // 3. 为服务器实例绑定 request 事件,监听客户端的请求 server.on('request', function (req, res) { console.log("Someone visit our web serve.") }) // 4. 启动服务器 server.listen(80, function () { // 80 可以省略,其他的不可以 console.log("server running ar http://127.0.1:80") })
了解req请求对象
const http = require('http') const server = http.createServer() // req 是请求对象,保护了与客户端相关的数据和属性 server.on('request', (req,res) => { // req.url 是客户端请求的 URL 地址 const url = req.url // req.method 是客户端请求的 method 类型(get/post) const method = req.method const str = `Your request url is ${url}, and request method is ${method}` // console.log(str) // 调用 res.end() 方法,向客户端响应一些内容 res.end(str) }) server.listen(80, () => { console.log("server running at http://127.0.0.1") })
解决中文乱码的问题
const http = require('http') const server = http.createServer() server.on('request', (req,res) => { // req.url 是客户端请求的 URL 地址 const url = req.url // req.method 是客户端请求的 method 类型(get/post) const method = req.method // 定义一个字符串,包含中文的内容 const str = `你请求的 url 地址是 ${url},请求的 method 类型是 ${method}` // 为了解决中文显示乱码的问题,需要设置响应头 Content-Type 的值为 text/html; charset=utf-8 res.setHeader('Content-Type','text/html; charset=utf-8') // console.log(str) // 调用 res.end() 方法,向客户端响应一些内容 res.end(str) }) server.listen(80, () => { console.log("server running at http://127.0.0.1") })
根据不同的url响应不同的html内容
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>' // 3. 判断用户请求的是否为 / 或 /index.html 首页 // 4. 判断用户请求的是否为 /about.html 关于页面 if (url === '/' || url === '/index.html') { content = '<h1>首页</h1>' } else if(url === '/about.html'){ content = '<h1>关于页面</h1>' } // 5. 设置 Content-Type 响应头,防止中文乱码 res.setHeader('Content-Type','text/html; charset=utf-8') // 6. 使用 res.end() 把内容响应给客户端 res.end(content) }) server.listen(80, () => { console.log("server running at http://127.0.0.1") })
web服务器案例
自己找一个 html 文件放在 clock 文件夹下,在 5.2 步骤处引入
// 1.1 导入 http 模块 const http = require('http') // 1.2 导入 fs 模块 const fs = require('fs') // 1.3 导入 path 模块 const path = require('path') // 2.1 创建 web 服务器 const server = http.createServer() // 2.2 监听 web 服务器的 request 事件 server.on('request', (req,res) => { // 3.1 获取到客户端请求的 url 地址 const url = req.url // 3.2 把请求的 url 地址映射为具体文件的存放路径 // const fpath = path.join(__dirname,url) // 5.1 预定义一个空白的文件存放路径 let fpath = '' if (url === '/') { // 5.2 如果请求的路径为 /,则手动指定文件的存放路径 // 自己找一个 html 文件放在 clock 文件夹下 fpath = path.join(__dirname,'./clock/index.html') } else { // 5.3 如果请求的路径不为 /,则动态拼接文件的存放路径 fpath = path.join(__dirname,'/wsh',url) } // 4.1 根据”映射“过滤的文件路径读取文件的内容 fs.readFile(fpath, "utf8", (err,data) => { // 4.2 读取失败,向客户端响应固定的“错误信息” if (err) return res.end("404 Not found.") // 4.3 设置 Content-Type 响应头,防止中文乱码 // res.setHeader('Content-Type','text/html; charset=utf-8') // 4.4 读取成功,将读取成功的内容,响应给客户端 res.end(data) }) }) // 2.3 启动服务器 server.listen(80, () => { console.log("server running at http://127.0.0.1") })
以上就是 node.js 中 使用 http 创建基本 web 服务器的功能,不懂得也可以在评论区里问我,以后会持续发布一些新的功能,敬请关注。