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>`
}