nodejs学习重点之http模块

6 篇文章 0 订阅
4 篇文章 0 订阅

http 模块

封装了http server 和 client的功能,就是说可以充当server处理请求,也可以发出请求。

  • http.createServer:创建server对象

  • http.get:执行http get请求

 const http = require('http')
  ​
  const server = http.createServer((req, res)=>{
     // console.log(`url: ${req.url}  method: ${req.method}`)
  ​
      // res.writeHead(200, {'Content-Type':'text/plain;charset=utf-8'})
      // res.end('收到了请求')
      router(req, res)
  });
  // 执行get请求
  // http.get("http://www.baidu.com", (res)=>{
  //     // console.log(res);
  //     res.setEncoding('utf-8')
  //
  //     let data = ''
  //     res.on('data', (chunk)=>{
  //         data += chunk
  //     })
  //     res.on('end', ()=>{
  //         console.log(data);
  //     })
  // })

【案例】文件浏览服务器

功能需求:启动一个服务,当用户访问服务时,给用户展示指定目录下的所有文件;如果子文件是目录,则能继续点进去浏览。http://127.0.0.1:5000/ 写完后访问这个网站5000是可变的, 最好不要指定1000以下的端口, 因为有可能系统已经占用了

let http = require("http");
let fs = require('fs');
//5
let path = require('path');


// 1.启动一个服务器
let server = http.createServer( (req, res)=>{
    //过滤掉/favicon.ico, 否则每次运行都会打印它
    if(req.url === '/favicon.ico'){
        res.end("")
        return
    }
    // console.log(req.url);
    //1.3 使的浏览器可以识别html标签  使用utf-8  不然浏览器默认会使用GBK(中国特用规范)
    res.writeHead(200, {'content-type': 'text/html;charset=utf-8'})
    showDir(req, res)//1.2 创一个对象

});
//1.启动服务器 
server.listen(5000);
//1.2 实现对象的方法
function showDir(req, res) {
    // 默认是/,读取test目录下面的
    let target = 'test';
    if(req.url !== '/'){
        // 如果不是/根路径,说明是请求了其他路径
        target = req.url;
    }

    //2. 读取目标目录下的文件列表
    let s = target.substring(target.indexOf("/")+1);
    console.log(s);
    fs.readdir(s, (err, files)=>{
        // res.end(JSON.stringify(files)) 这是用json显示文件内容
        
        //4. 遍历一下  li标签较多  给一个字符串拼接起来
        let listr = '';
        files.forEach( f=>{
            //5. 用target文件名拼的一个叫fpath的路径
            let fpath = path.join("./", target, f);
            console.log(fpath);
            //用了同步代码
            let stat = fs.statSync(fpath);
            if(stat.isDirectory()){
                //4. 应该拼上a标签
                // console.log(fpath);
                //4. 这里要换成f的那个文件名
                listr += `<li><a href="${fpath}">${f}</a></li>`
            }else {
                //不拼a标签
                listr += `<li>${f}</li>`
            }

        });

        res.end(makeHtml(listr))
    })
}

//3. 显示这些文本标签
function makeHtml(lis) {
    return `<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>标题</title>
    <style type="text/css">
        *{padding: 0; margin: 0}
        ul>li{
            list-style: none;
        }
        
        li{
            padding: .6rem 1rem;
            background-color:#ddd;
            transition: all 1s;
        }
        li:not(:first-child){
             border-top: solid 1px #999;
        }
        li:hover{
            background-color:#aaa;
        }
    </style>
</head>
<body>
<div>
    <ul>
        ${lis}
    </ul>
</div>
</body>
</html>`
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值