模块介绍
HTTP 模块能够创建 web 服务器,提供 web 服务。
主要方法:
http.createServer()
模块的作用
常见的服务器软件: IIS 、 Apache 等,安装了这些软件的电脑就能成为一个 web 服务器。Node.js 就能够为我们前端开发者创造一台服务器环境。
计网相关
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
中文乱码问题
当使用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
:
访问 /about.html
:
访问不存在的页面: