node.js 学习入门(04 - http 模块创建基本的web服务器)

简介: node.js 学习入门(04 - http 模块创建基本的web服务器)

什么是 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 服务器的功能,不懂得也可以在评论区里问我,以后会持续发布一些新的功能,敬请关注。

相关文章
|
JavaScript 前端开发 API
Node.js中发起HTTP请求的五种方式
以上五种方式,尽管只是冰山一角,但已经足以让编写Node.js HTTP请求的你,在连接世界的舞台上演奏出华丽的乐章。从原生的 `http`到现代的 `fetch`,每种方式都有独特的风格和表现力,让你的代码随着项目的节奏自由地舞动。
1031 65
|
中间件 Go
Golang | Gin:net/http与Gin启动web服务的简单比较
总的来说,`net/http`和 `Gin`都是优秀的库,它们各有优缺点。你应该根据你的需求和经验来选择最适合你的工具。希望这个比较可以帮助你做出决策。
714 35
|
缓存 网络协议 前端开发
Web 性能优化|了解 HTTP 协议后才能理解的预加载
本文旨在探讨和分享多种预加载技术及其在提升网站性能、优化用户体验方面的应用。
Web 性能优化|了解 HTTP 协议后才能理解的预加载
|
域名解析 缓存 网络协议
Web基础与HTTP协议
通过掌握这些基础知识和技术,开发者可以更加高效地构建和优化Web应用,提供更好的用户体验和系统性能。
463 15
|
缓存 安全 网络安全
HTTP/2与HTTPS在Web加速中的应用
HTTP/2与HTTPS在Web加速中的应用
872 11
|
Web App开发 缓存 .NET
HTTP 模块介绍
HTTP 模块介绍 HTTP 模块是一个在每次针对应用程序发出请求时调用的程序集。HTTP 模块作为 ASP.NET 请求管线的一部分调用,它们能够在整个请求过程中访问寿命周期事件。
1214 0
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
425 19
|
网络安全 开发者
如何解决HTTPS协议在WordPress升级后对网站不兼容的问题
以上就是解决WordPress升级后HTTPS协议对网站的不兼容问题的方法。希望能把这个棘手的问题看成是学校的管理问题一样来应对,将复杂的技术问题变得更加有趣和形象,并寻觅出解决问题的方式。希望你的网站能在新的学期得到更好的发展!
352 19
|
JSON 安全 网络协议
HTTP/HTTPS协议(请求响应模型、状态码)
本文简要介绍了HTTP与HTTPS协议的基础知识。HTTP是一种无状态的超文本传输协议,基于TCP/IP,常用80端口,通过请求-响应模型实现客户端与服务器间的通信;HTTPS为HTTP的安全版本,基于SSL/TLS加密技术,使用443端口,确保数据传输的安全性。文中还详细描述了HTTP请求方法(如GET、POST)、请求与响应头字段、状态码分类及意义,并对比了两者在请求-响应模型中的安全性差异。
1169 20