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

相关文章
|
23天前
|
XML 网络协议 Java
JavaWeb -- HTTP -- WEB服务器TOMCAT
JavaWeb -- HTTP -- WEB服务器TOMCAT
|
22天前
|
JavaScript 前端开发 安全
怎样用Node.js搭建web服务器
本文探讨了如何使用Node.js构建高效的HTTP服务器。首先,介绍了HTTP常见请求方法,如GET、POST、PUT等。接着,展示了如何使用Node.js的`http`模块创建服务器,并根据请求方法进行不同处理,如判断GET和POST请求,以及获取GET请求参数和处理POST请求数据。最后,讨论了服务器代码的模块化管理,包括路由管理和业务逻辑拆分,以提升代码的维护性和扩展性。通过本文,读者可以掌握基础的Node.js服务器开发及模块化设计技巧。
|
8天前
|
缓存 负载均衡 NoSQL
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
18 1
|
18天前
|
JavaScript
【干货】js判断url是否是合法http/https
【干货】js判断url是否是合法http/https
40 1
|
19天前
|
JavaScript 应用服务中间件 Apache
Node.js Web 模块
Node.js Web 模块
17 2
|
2月前
|
JavaScript 前端开发
基于 Node.js 环境,使用内置 http 模块,创建 Web 服务程序
基于 Node.js 环境,使用内置 http 模块,创建 Web 服务程序
|
18天前
|
Java 应用服务中间件 程序员
JavaWeb基础第四章(SpringBootWeb工程,HTTP协议与Web服务器-Tomcat)
JavaWeb基础第四章(SpringBootWeb工程,HTTP协议与Web服务器-Tomcat)
|
19天前
|
JSON JavaScript 中间件
【Node.js】从基础到精通(三)—— HTTP 模块探索
【Node.js】从基础到精通(三)—— HTTP 模块探索
15 0
|
弹性计算 C语言 容器
云服务器EC云上开发学习体验
简述通过老师引导,自己学习体验个人简历网页的设计以及在这一过程遇到的一些小问题,最后是一些感悟与成长。
云服务器EC云上开发学习体验
|
弹性计算 编译器 开发工具
ECS给线上学习带来的全新体验
本文介绍了作者在学习面向对象编程基础这门课程时借助ECS的高效性与便利性大大提升了学习效率的学习经验,以及在使用ECS完成课程任务时的心得与体验,也表达了作者对阿里云平台为学生提供这一优秀的教学资源的感谢。