node.js学习(二)

前言

哈喽,CSDN的各位大佬,咱又来更新笔记了,希望多多支持一下🔥,看的是黑马程序员的视频,喜欢的话就一起学习。

http 模块

http模块Node.js官方提供的,用于创建 web 服务器的模块,通过 http 模块提供的http.createServer()方法,就可以把一台电脑,变成一台 web 服务器,从而对外界提供 web 资源服务。

导入方法:

const http = require("http");

服务器和普通电脑区别:

服务器安装了 web 服务器软件,例如IIS(Internet Information Services)Apache(阿帕奇)等,通过安装这些服务器软件可以把电脑当成一个 web 服务器。

IP 地址

IP 地址是互联网上每台技术算计的唯一地址(例:192.168.1.1)

在这里插入图片描述

  1. 互联网中每台 web 服务器,都有自己的 ip 地址
  2. 可以把自己的电脑当成一台服务器访问。

域名和域名服务器

虽然 ip 地址可以唯一标识网络上的计算机,但不直观,不好记忆,随后发明了域名地址

ip 地址和域名是一一对应的关系,对应的关系放在域名服务器(DNS) 中,域名服务器就是提供 ip 地址和域名之间的转换服务的服务器


127.0.0.1 对应的域名就是localhost.

端口号

每个 web 服务器都对应一个唯一的端口号,客户端发送过来网络请求,通过端口号,可以被对应的web服务器进行处理。

在这里插入图片描述

注:

  1. 每个端口号不能同时被多个 web 服务器占用。
  2. 在实际应用中,URL 中的 80 端口可以省略
创建基本 web 服务器

步骤:

1. 导入http模块
const http = require("http");
2. 创建 web 服务器实例
const server = http.createServer();
3. 为服务器实例绑定 request 事件,监听客户端的请求
// 使用服务器的 .on()方法
server.on("request", (req, res) => {
  //有客户请求服务器,就会触发request事件,从而调用这个函数
  console.log("Someone visit our web server.");
});
4. 启动服务器
//调用server.listen(端口号,回调)方法。
server.listen(80, () => {
  console.log("http server running at http://127.0.0.1:80");
});
实例
const http = require("http");

const server = http.createServer();
server.on("request", (req, res) => {
  console.log("someone visit our web server");
});

server.listen(8080, () => {
  console.log("your server running at 127.0.0.1:8080");
});

在这里插入图片描述

req 请求对象

只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定的request 事件

如果想在事件处理函数中,访问与客户端相关的数据属性,可以使用的方法:

server.on("request", (req, res) => {
  //req是请求对象
  //req.url是客户端请求的URL地址
  //req.method是客户端的method请求类型
  const str = `Your request url is ${req.url}, and request method is ${req.method}`;
  console.log(str);
});

在这里插入图片描述

res 响应对象

在服务器的 request 事件处理函数中,如果想访问与服务器相关的数据或实行,可以使用的方法:

server.on('request',(req.res)=>{
    //res是响应对象,包含了与服务器相关的数据和属性
    // 例如:发送字符串
    const str = `your request url is ${req.url},and request method is ${req.method}`
    res.send(str);
})

案例:

const http = require("http");

const server = http.createServer();
server.on("request", (req, res) => {
  const str = `Your request url is ${req.url},and your request method is ${req.method}`;
  //向客户端发送指定的内容
  res.end(str);
});

server.listen(8080, () => {
  console.log("your server running at 127.0.0.1:8080");
});

在这里插入图片描述

解决中文乱码问题

当调用res.end()方法,向客户端发送中文内容是,会出现乱码问题,需要手动设置内容的编码格式

server.on("request", (req, res) => {
  //发送的内容包括中文
  const str = `请求的URL地址为${req.url},请求的方法是${req.method}`;
  res.setHeader("Content-Type", "text/html;charset=utf-8");
  res.end(str);
});

设置之前
在这里插入图片描述

设置之后

在这里插入图片描述

明显看到在浏览器打开会出现乱码,而接口调试工具却没有出现这种问题,我想可能是在调试工具发送请求并在收到请求时,自动加上了响应格式。

根据不同 URL 返回不同内容

核心实现步骤

  1. 获取请求的 URL 地址
  2. 设置默认的响应内容为 404 Not found
  3. 判断用户请求的是否为//index.html首页
  4. 判断用户请求的是否是其他页面
  5. 设置Content-Type响应头,防止中文乱码
  6. 使用res.end()把内容返回给客户端
动态响应内容
server.on('request',(req,res)=>{
  const url = req.url   // 获取请求的URL地址
  let content = '<h1>404 Not found</h1>'// 设置默认内容
  if(url === '/'|| url === '/index.html'){
    content = '<h1>首页</h1>'//用户请求的是首页
  }else if(url === '/about.html'){
    content = '<h1>关于页面</h1>' //请求关于页面
    res.setHeader('Content-Type','text/Html;charset=utf-8'); // 设置编码格式
    res.end(content)
  }
})
案例:
const http = require("http");

const server = http.createServer();

server.on("request", (req, res) => {
  const url = req.url;
  var content = "<h1>404 Not found</h1>";
  if (url === "/" || url === "/index.html") {
    content = "<h1>首页</h1>";
  } else if (url === "/about.html") {
    content = "<h1>关于页面</h1>";
  }
  res.setHeader("Content-Type", "text/Html;charset=utf-8");
  res.end(content);
});

server.listen(8080, () => {
  console.log("web server running at 127.0.0.1:8080");
});

在这里插入图片描述
在这里插入图片描述

案例 - 实现 clock 时钟的 web 服务器
核心思路

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

在这里插入图片描述

实现步骤
  1. 导入需要的模块
//1. http
const http = require("http");
//2. path
const path = require("path");
// 3. fs
const fs = require("fs");
  1. 创建基本的 web 服务器
const server = http.createServer();

server.on("request", (req, res) => {});

server.listen(80, () => {
  console.log("server running at 127.0.0.1");
});
  1. 将资源的请求 URL 地址映射为文件的存放地址
//获取客户端的URL地址
const url = req.url;
// 映射成为本地地址
const fpath = path.join(__dirname, url);
  1. 读取文件内容并响应给客户端
fs.readFile(fpath, "utf8", (err, data) => {
  if (err) return res.end("404 Not found");
  res.end(data);
});
  1. 优化资源的请求路径
let fpath = "";
if (url === "/") {
  fpath = path.join(__dirname, "./clock/index.html");
} else {
  fpath = path.join(__dirname, "./clock", url);
}

完整代码:

const http = require("http");
const path = require("path");
const fs = require("fs");

const server = http.createServer();

server.on("request", (req, res) => {
  //获取URL
  const url = req.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, data) => {
    if (err) return res.end("404 Not found");
    res.end(data);
  });
});

server.listen(8080, () => {
  console.log("server running at http://127.0.0.1:8080");
});
留言

🔥🔥🔥🔥一起学习吧🔥🔥🔥🔥

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

章鱼哥vlog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值