Notes
Node.js
HTTP 模块

模块介绍

HTTP 模块能够创建 web 服务器,提供 web 服务。

主要方法:

  • http.createServer()

模块的作用

常见的服务器软件: IIS 、 Apache 等,安装了这些软件的电脑就能成为一个 web 服务器。Node.js 就能够为我们前端开发者创造一台服务器环境。

计网相关

IP地址

互联网上每台计算机的唯一地址。只有在知道对方电脑的IP地址的情况下才能进行数据通信。

IP地址详细解析

域名和服务器

可以将 IP地址 比喻成身份证号,那么域名就可以比作 姓名 ,域名更加便于记忆。

域名和服务器详情解析

创建服务器

模块导入

同样是使用 require 导入。

const http=require('http')

创建实例

const server = http.createServer()

绑定 request 事件

// .on 方法可以绑定 request 事件
server.on('request',(req ,res)=>{
    // 监听。只要有客户端来请求服务器,就会触发request事件,从而调用这个事件函数
    console.log('Someone visit our web server');
})

启动服务器

// 调用 server.listen(端口号,cb回调)方法,即可启动web服务器
// 这里运行在 80 端口
server.listen(80,()=>{
    console.log('http server running at http://127.0.0.1');
})

req 请求对象

// .on 方法可以绑定 request 事件
server.on('request',(req ,res)=>{
    // req是请求对象,包含了和客户端相关的数据和属性
    // req.url 是客户端的 URL 地址
    // req.method 是客户端的请求类型
    const str = 'Your request url is ${req.url},and request method is ${req.method}';
    console.log(str);
})

创建脚本 server1.js ,执行脚本。

const http = require("http");
 
const server = http.createServer();
// req是请求对象,包含了与客户端相关的属性和数据
server.on("request", (req) => {
  // req.url 是客户端的 URL 地址
  const url = req.url;
  // req.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");
});
node server1

终端运行结果:

server running at http://127.0.0.1

然后打开浏览器访问后,终端输出:

Your request url is / ,and request method is GET

在浏览器输入框输入 http://127.0.0.1/index.html ,终端运行结果:

Your request url is /index.html ,and request method is GET

res 响应对象

如果在 request 事件中,如果想访问服务器相关的数据属性,可以采取下面的方式:

// .on 方法可以绑定 request 事件
server.on('request',(req ,res)=>{
    // res 是响应对象,它包含了与服务器相关的数据和属性,例如:
    const str = 'Your request url is ${req.url},and request method is ${req.method}';
    // res.end()方法,向客户端发送指定的内容,结束此次过程
    res.end(str);
})

修改上一节的代码:

const http = require("http");
 
const server = http.createServer();
// req是请求对象,包含了与客户端相关的属性和数据
server.on("request", (req,res) => {
  // req.url 是客户端的 URL 地址
  const url = req.url;
  // req.method 是客户端的请求方式
  const method = req.method;
  const str = `Your request url is ${url} ,and request method is ${method}`;
  console.log(str);
  // 调用 res 响应一些消息,将 str 返回给客户端
  // highlight-start
  res.end(str);
  // highlight-end
});
server.listen(80, () => {
  console.log("server running at http://127.0.0.1");
});

执行,这时候客户端就能拿到返回结果了:

server running at http://127.0.0.1
Your request url is /index.html ,and request method is GET
Your request url is /favicon.ico ,and request method is GET

1

中文乱码问题

当使用res.end(str);发送中文内容时,会发生乱码,因此需要设置响应的值:

server.on("request", (req,res) => {
  // req.url 是客户端的 URL 地址
  const url = req.url;
  // req.method 是客户端的请求方式
  const method = req.method;
  const str = `Your request url is ${url} ,and request method is ${method}`;
  // 设置响应头
  // highlight-start
  res.setHeader('content-Type','text/html;charset=utf-8');
  // highlight-end
  // 调用 res 响应一些消息,将 str 返回给客户端
  res.end(str);
});

不同 URL 响应不同的 html 内容

  • 获取请求的 URL 地址
  • 设置默认返回内容,404
  • 判断是否为 / 或者 /index.html 首页
  • 判断是否为 /about.html 页面(其他页面)
  • 防止中文乱码
  • 使用 res.end() 将内容相应给客户端
const http = require("http");
 
const server = http.createServer();
// req是请求对象,包含了与客户端相关的属性和数据
server.on("request", (req, res) => {
  const url = req.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);
});
server.listen(80, () => {
  console.log("server running at http://127.0.0.1");
});

访问 //index.html :
1

访问 /about.html:
2

访问不存在的页面:

3