文件内容作为服务器的响应练习

 1 /**
 2  * 创建一个服务
 3  * GET  /index.html     响应当前目录下 public 目录中 index.html 文件内容
 4  * GET  /css/app.css    响应当前目录下 public 目录中 css/app.css 文件内容
 5  * GET  /js/app.js    响应当前目录下 public 目录中 js/app.js 文件内容
 6  */
 7 
 8  //获取fs文件模块
 9  const fs= require('fs');
10  //获取将请求的url模块
11 
12  const urltool= require('url');
13 
14  //创建服务
15 require('http').createServer((request, response)=>{
16     // 获取请求方式
17     let method= request.method.toUpperCase();
18     //获取url路径
19     let pathname= urltool.parse(request.url).pathname;
20     // 看我打印结果
21     console.log(pathname)
22  // /css/app.css拿着这个路径进入下面判断
23     //判断请求方式和路径 /public/css/app.css 不满足条件,
24     // 所有条件都不满足.也就是都没有进入任何一个判断,没进入判断,就没有相应内容,外面就会一直在等待
25     // 这样的话自然就读不到内容
26    
27     if(method==='GET' && pathname === '/index.html'){
28         const fd = fs.createReadStream(__dirname+'\\public\\index.html')
29         fd.pipe(response)  
30         // fs.readFile(__dirname+'\\public\\index.html', (err, data)=>{
31         //     if(err){
32         //         //返回状态吗
33         //         response.statusCode=404;
34         //         response.end('404')
35         //         return;
36         //     }
37 
38         //     response.end(data)
39         // });
40 
41         ///css/app.css
42     }else if(method==='GET' && pathname==='/app.css'){
43         const fd = fs.createReadStream(`${__dirname}\\public\\css\\app.css`)
44         fd.pipe(response) 
45         // fs.readFile(`${__dirname}\\public\\css\\app.css`, (err, data)=>{
46         //     if(err){
47         //         //返回状态吗
48         //         response.statusCode=404;
49         //         response.end('404')
50         //         return;
51         //     }
52 
53         //     response.end(data)
54         // });
55     }else if(method==='GET' && pathname==='/app.js'){
56         //创建读取流
57         const fd = fs.createReadStream(`${__dirname}\\public\\js\\app.js`)
58         fd.pipe(response)
59         // fs.readFile(`${__dirname}\\public\\js\\app.js`, (err,data)=>{
60         //     if(err){
61         //         //返回状态吗
62         //         response.statusCode=404;
63         //         response.end('404')
64         //         return;
65         //     }
66 
67         //     response.end(data)
68         // })
69     }else{
70         response.setHeader('Content-type','text/plain;charset=utf-8');
71         response.end('你的路径输入不正确')
72     }
73     
74 
75 }).listen(8000, ()=>{
76     console.log('node服务开启了')
77 });

 

2.升级版,对文件路径和报文的url关联,不用每次判断路径

 1 // static 静态. 通过 URL 访问文件夹中的静态资源
 2 // 静态资源  长时间内容不发生改变的资源
 3 // HTML  CSS  JS  图片  字体文件 音频 视频  属于静态资源
 4 
 5 /**
 6  * GET   /index.html     返回 public/index.html 的文件内容
 7  * GET   /css/app.css     返回 public/css/app.css 的文件内容
 8  * GET   /js/app.js     返回 public/js/app.js 的文件内容
 9  */
10 const fs = require("fs");
11 const http = require("http");
12 const urlTool = require("url");
13 
14 const server = http.createServer((request, response) => {
15     //提取参数 get  Get
16     let method = request.method.toUpperCase();
17     let pathname = urlTool.parse(request.url).pathname; //将request.url转换成对象,获取pathname
18 
19     // console.log(pathname);//  /index.html     =>    public/index.html
20                          //   /css/app.css    =>    public/css/app.css
21     //拼接文件路径
22     let filePath = __dirname + '/public'+pathname;
23     // let filePath = __dirname + '\\public' + pathname.replace(/\//g,"\\");
24     
25     //读取文件的内容fs.existsSync(filePath),判断文件路径是否存在
26     if(fs.existsSync(filePath) && method === "GET"){
27         //读取对应的文件内容
28         fs.readFile(filePath, (err, data)=>{
29             if(err){  //如果是存在的文件夹,就会报错。readFile方法是操作文件的
30                 //如果读取出错
31                 response.statusCode = 500;
32                 response.end("<h1>500 Internal Server Error</h1>");
33                 return;
34             }
35             response.end(data);
36         });
37     }else{
38         //如果文件不存在
39         response.statusCode = 404;
40         response.end("<h1>404 Not Found</h1>")
41     }
42 });
43 
44 server.listen(8000, () => {
45     console.log("service running, 8000 端口监听中......");
46 })

 

posted @ 2020-06-09 23:40  全情海洋  阅读(201)  评论(0编辑  收藏  举报