Node-http模块
1.1 什么是http模块
http模块是node.js官方提供的,用来创建web服务器的模块
通过Http模块提供的http.creatServer()
能方便得把一台普通的电脑,变成一台web服务器,对外提供web服务
如果希望使用http模块创建web 服务器,需要先导入它:
const http = require('http');
1.2 服务器相关概念
1.2.1 IP地址
IP地址就是互联网上每天计算机的唯一地址,具有唯一性
只有在知道对方IP地址的前提下,才能进行数据通信
1.2.2 域名和域名服务器
1.2.3 端口号
1.3 创建基本web服务器的步骤
1.3.1 创建web服务器的基本步骤
- 导入http模块
- 创建web服务器实例
- 为服务器实例绑定request事件,监听客户端请求
- 启动服务器
第一步:导入http模块
const http = require('http');
第二步:调用http.creatServer()方法,快速创建一个web服务器
const http = require('http');
const server = http.createServer();
第三步:绑定request事件
为服务器实例绑定request事件,即可监听客户端发送过来的网络请求
const http = require('http');
const server = http.createServer();
server.on('request',(req,res) => {
//只要有客户端请求我们自己的服务器,就会触发request事件,从而调用这个时间处理函数
console.log('Welcome to visit my server!');
})
//第一个参数,'requset'是事件的名称,一个字符串
//第二个参数,是触发request事件会执行的一个回调
第四步:启动服务器
调用服务器实例提供的.listen()方法,即可启动但你关卡的web服务器实例:
const http = require('http');
const server = http.createServer();
server.on('request',(req,res) => {
//只要有客户端请求我们自己的服务器,就会触发request事件,从而调用这个时间处理函数
console.log('Welcome to visit my server!');
})
//第一个参数,'requset'是事件的名称,一个字符串
//第二个参数,是触发request事件会执行的一个回调
server.listen(8090,() => {
console.log('监听8090端口中,访问 http://127.0.0.1:8090 访问网站');
})
// 监听6666端口,监听成功后执行后面的回调函数
运行: node 文件名
1.3.2 req请求对象
只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定的request事件处理函数
如果想在事件处理函数中,访问与客户端相关的数据和属性,可以使用下面的方式
req是请求对象,它包含了与客户端相关的数据和属性,例如:
req.url 是客户端请求的url地址
req.method 是客户端的method请求类型
const http = require('http');
const server = http.createServer();
server.on('request',(req,res)=>{
// req是请求对象,它包含了与客户端相关的数据和属性,例如:
// req.url 是客户端请求的url地址
// req.method 是客户端的method请求类型
const str =`你请求的Url地址为${req.url},你请求的方式为:${req.method}`;
console.log(str);
});
server.listen('8090',()=>{
console.log("listening 8090 port! Visit http://127.0.0.1:8090");
})
1.3.3 res响应对象
const http = require('http');
const server = http.createServer();
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);
});
server.listen('8090',()=>{
console.log("listening 8090 port! Visit http://127.0.0.1:8090");
})
1.3.4 解决中文乱码问题 res.setHeader()
当我们使用res.end()方法,向客户端发送中文内容的时候,会出现乱码问题,此时,需要手动设置内容的编码格式
const http = require('http');
const server = http.createServer();
server.on('request',(req,res)=>{
// res是响应对象,它包含了与服务器相关的数据和属性,例如:
//要发送到客户端的字符串
const str = `你的请求地址是 ${req.url} ,请求方法是 ${req.method}`
//res.setHeader设置响应头Content-Type的值
res.setHeader('Content-Type','text/html;charset=utf-8');
//res.end()方法的作用
//向客户端发送指定的内容,并结束这次请求的处理过程
res.end(str);
});
server.listen('8090',()=>{
console.log("listening 8090 port! Visit http://127.0.0.1:8090");
})
1.4 根据不同的url响应不同的内容
const http = require('http');
const server = http.createServer();
server.on('request', (req, res) => {
const url = req.url;
let content = '404 Not Found'; //定义其它目录为404
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('8090', () => {
console.log("listening 8090 port! Visit http://127.0.0.1:8090");
})
1.5 自定义静态网站服务器
//导入http,fs,path模块
const http = require('http');
const fs = require('fs');
const path = require('path');
const server = http.createServer();
server.on('request', (req, res) => {
// 获取到客户端请求的url地址
const url = req.url;
// 把请求的Url地址,映射为本地文件的存放路径
const fpath = path.join(__dirname,'index',url);
console.log(fpath);
//根据映射来的文件路径来读取文件
fs.readFile(fpath, (err, dataStr) => {
if (err) return res.end('404');
res.end(dataStr);
});
});
server.listen(8090, () => {
console.log('Listening 8090 port!');
})
目录结构如下
效果如下