欢迎光临
我们一直在努力

【node.js】http模块

创建http服务端

创建步骤

1.导入http模块 const http=require('http');

2.创建服务对象 const server=http.createServer((req,res)=>{});  //有请求执行回调

3.监听端口,启动服务 server.listen(3000,()=>{});  //监听计算机的3000端口,如果有客户端向本计算机的3000端口发送请求,执行回调函数

注意事项

1.响应体直接返回中文会乱码

需要设置响应头: const server=http.createServer((req,res)=>{ res.setHeader('content-type','text/html;charset=utf-8');res.end('你好')});

2.http协议的默认端口为80,https协议默认端口为443,开发常用端口有3000、8090、8080、9000等

3.如果其他端口被占,不知道哪个资源占用了这个端口,可进入电脑的 资源监视器-侦听端口 查看

获取http请求报文信息

获取请求行信息

(1)获取请求方法    req.method

(2)获取请求路径    req.url    //只包含url中的路径与查询字符串

=>提取路径和查询字符串

方法一

1.引入url模块    const url=require('url')

2.提取路径    let res_=url.parse(req.url);

                     let pathname=res_.pathname;

4.提取查询字符串    let res_=url.parse(req.url,true);    //把query变为对象

                                let keyword=res_.query.keyword;

方法二

1.let url=new URL(req.url,'http://127.0.0.1');

2.路径    console.log(url.pathname);

3.查询字符串    console.log(url.searchParams.get('keyword'))

(3)获取http版本    req.httpVersion    //不常用

(4)获取请求头    req.headers    //返回一个对象

获取请求体信息

1.声明变量 let body='';

2.绑定data事件 req.on('data',chunk=>{body+=chunk;})

3.绑定end事件 req.on('end',()=>{console.log(body);res.end("hello');})

http响应设置

设置响应行信息

设置状态码    res.statusCode=404;…

响应状态描述    res.statusMessage='aaa';  //一般都自动适应 很少自己设置

设置响应头

res.setHeader(响应头名字,值)    //res.setHeader('Content-type','text/html;charset=utf-8');

设置响应体

res.write()   //可以多次调用,一般设置了write就不在end中设置内容了

     或

res.end()    //必须有且只有一个

返回html文档

请求资源加载过程:客户端先向服务器发送请求获取html文档,遇到外部css文档,请求获取,遇到图片资源,请求获取,遇到js,请求获取,各个请求是并行的

搭建静态资源服务

1.读取路径并返回对应文件内容

静态资源目录,即网站根目录,是静态资源所在的目录

2.为不同文件类型返回正确格式

mime类型//媒体类型

根据不同文件的mime类型返回不同类型的文件格式:

let mime={
html:'text/html',css:'text/css',js:'text/javascript',
png:'image/png',jpg:'image/jpeg',gif:'image/gif',
mp4:'video/mp4',mp3:'audio/mpeg',json:'application/json'
}

let ext=path.extname(filePath).slice(1);
let type=mimes[ext];

if(type){res.setHeader('content-type',type)}
else{res.setHeader('content-type','application/octet-stream')} 

//对于未知类型资源,可以选择application/octet-stream类型,浏览器在遇到该类型的响应时,会对响应体内容进行独立存储,也就是我们常见的下载效果

3.问题解决

解决乱码

在类型后加一个charset=utf-8

通常不需要手动加,会自动根据网页的字符集进行调整

错误处理

if(req.method!=='GET'){res.statusCode=405;res.end('<h1>405 Method Nod Allowed</h1>') //方法错误
fs.readFile(filePath,(err,data)=>{
if(err){
console.log(err);
res.setHeader('content-type','text/html;charset=utf-8');
switch(err.code){
case 'ENOENT':
res.statusCode=404;
res.end('<h1>404 Not Found</h1>')
case 'EPERM':
res.statusCode=403;
res.end('<h1>403 Forbidden</h1>');
default:
res.statusCode=500;
res.end('<h1>Internal Server Error</h1>')
}
}
}

 路径

绝对路径

相对路径

需要与当前页面URL路径进行计算,等到完整URL后再发送请求(不可靠)

赞(0)
未经允许不得转载:171主机测评 » 【node.js】http模块
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址