node笔记03——Nodejs学习之HTTP模块、最齐全的node.js学习笔记教程,包含练习案例

本文介绍了Node.js中的http模块,用于创建web服务器。通过http.createServer()方法,结合request事件监听客户端请求,响应不同内容。示例包括处理不同URL返回不同页面、读取文件内容作为响应,并实现了一个简单的clock时钟web服务器,将文件路径与请求URL对应,读取文件内容响应给客户端。
摘要由CSDN通过智能技术生成

node.js学习之http模块

回顾:什么是客户端,什么是服务器

在网络中负责消费资源的电脑叫做客户端而负责对外提供网络资源的电脑则被叫做服务器

HTTP模块便是Node.js官方提供的用来创建web服务器的模块,通过http.createServer( )方法对外提供资源,从而将普通的电脑编程一台服务器

http模块的具体作用

服务器和电脑的区别在于服务器上安装了web服务器软件。而对于前端在Node.js中我们不需要使用IIS/Apache等第三方的web软件,只需要利用Node.js的http模块便可以实现对外提供web服务的功能

服务器的相关概念:

一、IP地址:互联网上的每一台计算机的唯一地址,是唯一的。常用的格式为”点分十进制“,如:192.168.1.1,每一个数字都是0~255之间的十进制整数。

二、在互联网中每一台web服务器也拥有自己的ip地址,通过终端中的 ping命令可以查询对应网站的IP地址

三、域名和域名服务器:域名是IP地址的别名,IP和域名是一一对应的关系,这份对应关系被存放在域名服务器当中(DNS服务器),在用域名访问网站的时候DNS服务器还会将域名转换为IP地址。

域名的作用在于便于记忆和访问网站。

四、在开发和测试的环境中也有本地服务器的IP“127.0.0.1”它对应的域名是“localhost”。

五、端口号类似于门牌号,在每一台电脑中可以运行多个Web服务,而不同的web服务都有对应的一个唯一的端口号。每一个端口号不能被多个web服务所占用。在实际应用中,URL的80端口是可以被省略的。

利用http模块创建基本的web服务器

步骤:

一、导入http模块

二、创建web服务器示例

三、为服务器绑定request事件,监听客户端请求

四、启动服务器

req请求对象

只要服务器介绍到了客户端的请求,就会触发server.on()为服务器绑定的request事件处理函数,如果想在request事件处理函数中访问与客户端相关的数据或属性,可以使用如下方式:

const http = require('http')
const server = http.createServer()

  // 参数req就是请求对象,其中包含了与客户端相关的数据和属性
server.on('request',(req)=>{
  // req.url 是客户端请求的URL低脂
  const url = req.url
  // req.method 是客户端请求的method类型
  const method = req.method
  const str = `Your request url is ${url},and request method is ${method}`
  console.log(str)
})

server.listen(80,()=>{
console.log('server running at http://127.0.0.1')
})
res响应对象

在服务器的request事件处理函数中如果想访问与服务器相关的数据或属性可以使用一下方式:

const http = require('http')
const { send } = require('process')
const server = http.createServer()

  // 参数req就是请求对象,其中包含了与客户端相关的数据和属性
server.on('request',(req,res)=>{
  // req.url 是客户端请求的URL低脂
  const url = req.url
  // req.method 是客户端请求的method类型
  const method = req.method
  const str = `Your request url is ${url},and request method is ${method}`
  console.log(str)
  // 防止中文显示乱码,调用res.setHeader()方法和设置Content-type响应头来解决
  res.setHeader('Content-type','text/html; charset=utf-8')
  // 调用res.end方法,向客户端响应一些内容
  res.end(str)
})


server.listen(80,()=>{
console.log('server running at http://127.0.0.1')
})

根据不同的URL来响应不同的内容

具体实现
const http = require('http')
const server = http.createServer()

server.on('request',(req,res)=>{
    // 一、获取请求的url地址
    const url = req.url
    // 二、设置默认的响应内容为 404 NOT found
    let content = '<h1>404 Not found!</h1>'
    // 三、判断用户请求的是否为/ 或者/idnex.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('server running at http://127.0.0.1')
})

案例:实现clock时钟的web服务器

实现思路:

把文件的实际存放路径作为每个资源的请求url地址

实现步骤:

一、导入需要的模块

 const http = require('http')// http模块
 const fs = require ('fs')// 文件系统模块
 const path = require('path')// 路径处理模块

二、创建基本的web服务器

const server = http.createServer()
// 监听web服务器的request的事件
server.on('request',(req,res)=>{ })
// 启动web服务器
server.listen(80,()=>{ 
	console.log('server listen at http://127.0.0.1:80')
})

三、将资源的请求url地址映射为文件的存放路径

// 获取到客户端请求的 URL 地址
const url = req.url
// 将 URL 地址映射为本地的文件存放路径
const fpath = path.join(__dirname,url)

四、读取文件的内容并响应给客户端

// 根据映射过来的文件路径读取文件
fs.readFile(fpath,'utf8',(err,dataStr)=>{
//读取失败
if(err) return res.end('404 Not found!')
res.end(dataStr)
})

五、优化以上步骤 实现最终效果

const http = require('http')// http模块
const fs = require ('fs')// 文件系统模块
const path = require('path')// 路径处理模块

// 创建web服务器
const server = http.createServer()
// 监听web服务器的request的事件
server.on('request',(req,res)=>{
    // 获取到客户端请求的 URL 地址
    const url = req.url
    // // 将 URL 地址映射为本地的文件存放路径
    // const fpath = path.join(__dirname,url)
    // 优化
    let fpath = ''
    if(url === '/'){
        fpath = path.join(__dirname,'/clock/index.html')
    }else{
        fpath = path.join(__dirname,'/clock',url)
    }
    // 根据映射过来的文件路径读取文件
    fs.readFile(fpath,'utf8',(err,dataStr)=>{
    // 读取失败
    if(err) return res.end('404 Not found!')
    // 读取成功,将内容响应给客户端
    res.end(dataStr)
    })
 })
// 启动服务器
server.listen(80,()=>{ 
	console.log('server listen at http://127.0.0.1:80')
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值