浅谈nodejs中HTTP模块应用

  这里给大家分享下后端人员如果利用nodejs对数据的一些处理情况  适用于初学者使用 大牛勿喷

给大家分享下主要后端思想部分代码,前端部分就不展示了

  1 const http = require("http");
  2 const fs = require("fs");
  3 const url=require("url");
  4 const path = require("path");
  5 const util = require("./util");
  6 const Mock = require("./src/app/mock/node_modules/mockjs");
  7 
  8 //创建一个服务
  9 let arr = [];//用来存放下面建立的json文件的数据
 10 const server = http.createServer((request, response) => {
 11     //首先我们会接受静态请求和接口请求 通过封装函数来实现对其不同的操作
 12     //首先我们对请求进行分类
 13     let filePath = request.url == "/" ? "login.html" : url.parse(request.url).pathname;
 14     //console.log(filePath)
 15     if (path.extname(filePath)) {
 16         //存在后缀就是静态资源文件请求
 17         util.fileRead(path.join("./src", filePath), response)
 18     } else if (filePath == "/api/login") {
 19 
 20         //声明一个对象给前端返回后端处理的数据请求结果
 21 
 22         let opj = {
 23             code: 1,
 24             msg: "请求成功"
 25         }
 26         //接受前端给我发过来的请求体
 27         util.getData(request, (data) => {
 28             console.log(data, "前端请求数据结果")
 29             //登录的ajax请求
 30             //我们利用一个json文件模拟本地数据库
 31             //首先判断我们这个数据库存在不存在
 32             if (fs.existsSync("./data.json")) {
 33                 //存在的情况下
 34                 //和数据库的数据进行比较
 35                 //读取数据库文件资源
 36                 let dataAll = JSON.parse(fs.readFileSync("./data.json", "utf8"));
 37                 data = JSON.parse(data)
 38                 //console.log(data, "dengluqingqiu............")
 39                 //检验是不是账号密码不对
 40                 let flag = dataAll.find(item => {
 41                     return item.user == data.user && item.pwd == data.pwd;
 42                 });
 43                 let flag1 = dataAll.find(item => {
 44                     return item.user == data.user;
 45                 })
 46                 //console.log(flag, "**************")
 47                 //检测是不是这个名字就不存在了
 48                 if (!flag) {
 49                     //找不到证明验证失败
 50                     opj.code = 0;
 51                     opj.msg = "用户名或者密码输入错误"
 52                 }
 53                 if (!flag1) {
 54                     opj.code = 0;
 55                     opj.msg = "该用户没有被注册"
 56                 }
 57 
 58             } else {
 59                 //不存在的情况下
 60                 opj.code = 0;
 61                 opj.msg = "该用户没有被注册"
 62             }
 63             //返回后端处理结果
 64             //console.log(JSON.stringify(opj))
 65             //console.log(opj, "--------------------")
 66             response.end(JSON.stringify(opj))
 67         })
 68     } else if (filePath == "/api/register") {
 69         //声明一个对象给前端返回后端处理的数据请求结果
 70         let opj = {
 71             code: 1,
 72             msg: "注册成功"
 73         }
 74         //注册页面发来的ajax请求
 75         //接受ajax传过来的数据
 76         util.getData(request, data => {
 77             //console.log(data, "前端请求数据结果")
 78             console.log(data, "这里")
 79             data = JSON.parse(data);
 80             let f = arr.some(item => {
 81                 return item.user == data.user
 82             })
 83             if (!f) {
 84                 arr.push(data);
 85             }
 86             //首先在这个请求中我们还是利用一个json文件代替数据库
 87             //判断这个文件是不是存在 不存在创建
 88             if (!fs.existsSync("./data.json")) {
 89                 //不存在的情况下
 90                 //创建
 91                 if (arr.length) {
 92                     fs.writeFileSync("./data.json", JSON.stringify(arr));
 93                 }
 94             } else {
 95                 //存在的情况下
 96                 //获取这个文件收据进行遍历
 97                 let read = JSON.parse(fs.readFileSync("./data.json", "utf8"));
 98                 let flag = read.some(item => {
 99                     return item.user == data.user
100                 });
101                 if (flag) {
102                     opj.code = 0;
103                     opj.msg = "该用户已被注册过"
104                 }
105                 fs.writeFileSync("./data.json", JSON.stringify(arr));
106             }
107             response.end(JSON.stringify(opj))
108         })
109 
110     } else if (filePath === "/api/main") {
111         util.getData(request,data=>{
112             //console.log(data,"**********");
113             let {page,limit}=data;
114             //利用mock随机生成图片
115             let images=Mock.Random.image("200x200","#f00","chen");
116             //利用传过来的参数随机生成一个数据给前端返回回去
117             let mockData=Mock.mock({
118                 [`list|${limit}`]:[
119                     {
120                         title:'@ctitle',
121                         'id|+1':(page-1)*limit,
122                         img:images
123                     }
124                 ]
125             });
126             //将这个随机创造的数据返回给前端
127             response.end(JSON.stringify(mockData))
128         })
129     }
130 });
131 
132 //监听这个服务
133 server.listen(8000, () => {
134     console.log(server.address().port)
135 })

其中上述代码用到个几个封装如下   上述代码依然可以优化 怕优化太多不易理解 有能力的同学可以自己优化下

 1 const url = require("url");
 2 const fs = require("fs");
 3 module.exports={
 4     fileRead(rootPath,response){
 5         //此函数是对文件的读取 与判断文件是否存在滴
 6         if(fs.existsSync(rootPath)){
 7             //文件存在的情况 读取返回
 8             fs.readFile(rootPath,(err,data)=>{
 9                 if(err) throw err;
10                 response.end(data.toString())
11             })
12         }else{
13             //文件不存在的情况下 改状态码
14             response.ststusCode=404;
15             response.end()
16         }
17     },
18     getData(request,callBack){
19         //第一个参数是请求体 第二个参数是回调函数
20         //封装一个函数用来判断是get请求还是post请求
21         if(request.method==="POST"){
22             let data="";
23             request.on("data",chunk=>{
24                 data+=chunk;
25             });
26             request.on("end",()=>{
27                 callBack(data)
28             })
29         }else if(request.method=="GET"){
30             //注意这里第二个参数加个true可以 很有灵性
31             //将page=1&limit=15转换成对象 方便了后端人员的数据处理
32             let data=url.parse(request.url,true).query;
33             callBack(data)
34         }
35     }
36 }

    其实主要思想也就那几个   

    首先 我们需要创建一个服务 然后在这个服务中判断一下我们接受的http都是那些 

无非就是两种 一种是静态资源的加载  也就是我们的html页面的加载和css js的一些引入加载 

另一种就是我们的一些ajax接口的请求  通过前端人员给我们发送过来的请求 然后我们对其进行

处理后给前端返回处理后的结果 这时前端人员就可以根据我们的结果进行一系列的页面操作 

上述代码 还有不完整处  有时间在补充

没有对icon图标的处理  这里如果浏览器加载一次后就不会继续像服务器发送请求了 

会从缓存中读取的  

还有没有判断 既非接口也非静态文件资源的情况

也就是我们上网时常见的404页面走丢了那类网页  所以这里只需加载一个html页面即可

整体而言也就这些了  欢迎有不同想法或者思路的人在下方指出  您的评价是我进步的阶梯

猜你喜欢

转载自www.cnblogs.com/cq1715584439/p/10759055.html