一、创建HTTP服务端
创建后,就可以处理浏览器所发送的请求,还可以给浏览器返回响应。
步骤:
导入http模块:
const http=require('http');
创建服务对象:
函数接收一个实参,为一个函数
回调函数在接收到http请求的时候,就会执行。
const server=http.createServer((request,response)=>{});
监听端口,启动服务:
9000是端口号,回调函数在启动成功以后才会执行。
server.listen(9000,()=>{});
浏览器可以发送HTTP请求报文的
注意事项:
1、命令行ctrl+c停止服务
2、当服务器启动后,更新代码必须重启服务才能生效。
3、响应内容中有中文
解决方法:
//添加设置响应头解决中文乱码
//头名 content-type 头值为第二个参数
response.setHeader('content-type','text/html;charset=utf-8');
4、端口号被占用
方法一:把原来的端口给关了;
方法二:改一个端口号。
5、HTTP协议默认端口是80,HTTPS协议默认端口443。HTTP服务开发常用端口有3000,8080,8090,9000等。方便用户向服务器发送请求。
如果端口被气压程序占用,可以使用资源监视器找到占用端口的程序,然后使用任务管理器关闭对应的程序。
二、浏览器查看HTTP报文
打开控制台 (f12)点击网络
文件favicon.ico是谷歌默认有的,目的是获取标签页图标。
编辑
获取HTTP请求报文:
想要获取请求的数据,需要通过request对象。
含义
语法
请求方法
request.method
请求版本
request.hattpVersion
请求路径
request.url
URL路径
request('url').parse(request.url).pathname
URL查询字符串
request('url').parse(request.url,true).query
请求头
request.headers
请求体
request.on('data',function(chunk){})
request.on('end',function(){});
获取HTTP请求报文的请求体:
加上一个html文件
//导入http模块
const http=require('http');
//创建服务对象
const server=http.createServer((request,response)=>{
//1、声明变量 用它接收响应体的结果
let body='';
//2、绑定事件
request.on('data',chunk=>{
body+=chunk;
})
//3、绑定一个end事件 就是把可读流中的事件都读完了,会触发end事件
request.on('end',()=>{
console.log(body);
//响应
response.end('Hello');
});
});
//监听端口,启动服务:
server.listen(9000,()=>{
console.log('服务启动');
});
编辑
注意:每一个请求只能对应一个end方法。
设置HTTP响应报文:
1.设置响应状态码
response.statusCode=203;
2.响应状态的描述
response.statusMessage='ilove';
1与2运行结果:
编辑
3.设置响应头等例子
response.setHeader('content-type','text/html;charset=utf-8');
response.setHeader('Server','Node.js');
Server是来设置服务端的名字。
4.响应体设置
response.write('love');
一般使用write设置响应体就不再用end来在设置响应体了。
注意:每一个请求过来之后,执行回调函数,在回调函数执行过程中必须得有一个end方法,且必须只有一个end方法。
三、静态资源服务
静态资源是指内容长时间不发生改变的资源,例如图片,视频,CSS文件,JS文件,HTML文件,字体文件等。(是指在运行过程中不发生改变的)
动态资源是指内容经常更新的资源,例如百度首页,京东搜索列表页等。
搭建静态资源服务:
const http=require('http');
// 用fs模块将html文件内容读出来,然后放到end中
const fs=require('fs');
const sever=http.createServer((request,response)=>{
let {pathname}=new URL(request.url,'http://127.0.0.1');
//拼接文件路径 有一定的规律
let filePath=__dirname+'/page'+pathname;
//读取文件 fs异步
fs.readFile(filePath,(err,data)=>{
if(err){
response.statusCode=500;
response.end('文件读取失败');
return;
}
response.end(data);
})
});
sever.listen(9000,()=>{
console.log('成功');
});
四、网站根目录与静态资源目录
HTTP服务在那个文件夹中寻找静态资源,那个文件夹就是静态资源目录,也称之为网站根目录。