目录
http模块是Node.js官方提供的,用来创建web服务器的模块。通过http.createServer()方法就可以将一台电脑变成Web服务器,提供对外的资源。
引入方式:
const http = require('http')
Node.js不需要IIS、Apache等第三方软件,通过Node.js提供的http模块,可以仅通过几行代码,就可以把普通电脑变为Web服务器。
1. IP地址
一台电脑对应一个IP地址
2. 域名和域名服务器
IP地址和域名一一对应,映射表存于DNS域名服务中
3. 端口号

1. 创建步骤
- // 导入http模块
- const http = require('http');
- // 创建服务器实例
- const server = http.createServer();
- // 通过on方法绑定request事件,监听客户端请求
- // 需要传入两个参数,第一个是'requesr'字符串,第二个是监听的回调函数
- server.on('request', (req, res) => {
- // ...
- })
- // 服务器启动在指定端口, 并执行回调函数
- server.listen(80,() =>{
- // ...
- })

2. req 请求对象
只要服务器接收到了客户端的请求,就会调用server.on()为服务器绑定request事件处理函数,如果想在事件处理函数中,访问客户端相关的数据或属性,可以使用如下方式:
- const http = require('http');
- const server = http.createServer();
- server.on('request',(req) => {
- // req是客户端请求对象,包含了一些客户端相关的属性和数据
- const url = req.url; // 客户端请求url,端口号后的路径
- const method = req.method;// 客户端请求的方法
- console.log(`visit url is ${url}, and request method is ${method}`);
- })
- server.listen(8080,() => {
- console.log('http server is running at http://127.0.0.1:8080');
- })
把请求地址换成http://127.0.0.1:8080/index.html 、则会再次打印信息,由此可见,req的url属性只包含端口号后的路径

3. res响应对象
在服务器的request事件处理函数中,如果想访问服务器相关的数据或属性,可以使用如下方式:
- const http = require('http');
- const server = http.createServer();
- server.on('request',(req,res) => {
- const url = req.url;
- const method = req.method;
- const str = `visit url is ${url}, and request method is ${method}`;
- // res.end 方法的作用:向客户端返回指定数据,并结束此次请求
- res.end(str);
- })
- server.listen(8080,() => {
- console.log('http server is running at http://127.0.0.1:8080');
- })

4. 解决中文乱码问题
如果res返回的数据包含中文,返回到页面会出现乱码问题:
- server.on('request',(req,res) => {
- const url = req.url;
- const method = req.method;
- const str = `客户端访问的url是 ${url}, 请求的方法是 ${method}`;
- // res.end 方法的作用:向客户端返回指定数据,并结束此次请求
- res.end(str);
- })

乱码问题解决:通过setHeader()方法手动设置内容编码格式:
- server.on('request',(req,res) => {
- const url = req.url;
- const method = req.method;
- const str = `客户端访问的url是 ${url}, 请求的方法是 ${method}`;
- // 设置响应头'Content-Type', 内容为'text/html; charset=utf-8'
- res.setHeader('Content-Type', 'text/html; charset=utf-8');
- res.end(str);
- })
返回字符串正常显示:

动态响应内容步骤
- const http = require('http');
- const server = http.createServer();
- server.on('request',(req,res) => {
- const url = req.url;
- let content = '
404 Not Found
'; - if(url === '/' || url === '/index.html'){
- content = '
首页
'; - }else if(url === '/about.html'){
- content = '
关于页面
'; - }
- res.setHeader('Content-Type', 'text/html;charset=utf-8');
- res.end(content);
- })
- server.listen(8080,() => {
- console.log('http server is running at http://127.0.0.1:8080');
- })
默认根地址http://127.0.0.1:8080和http://127.0.0.1:8080/index.html 返回到结果都是一样的:
请求http://127.0.0.1:8080/about.html地址:

请求不存在但地址http://127.0.0.1:8080/abc.html :
