• 浅谈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页面即可

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

    一条不甘于平凡的咸鱼分享
  • 相关阅读:
    简单的模板解析函数
    HTML通过事件传递参数到js 二 event
    HTML通过事件传递参数到js一
    通过this获取当前点击选项相关数据
    LeetCode 20. 有效的括号(Valid Parentheses)
    LeetCode 459. 重复的子字符串(Repeated Substring Pattern)
    LeetCode 14. 最长公共前缀(Longest Common Prefix)
    LeetCode 168. Excel表列名称(Excel Sheet Column Title)
    LeetCode 171. Excel表列序号(Excel Sheet Column Number) 22
    LeetCode 665. 非递减数列(Non-decreasing Array)
  • 原文地址:https://www.cnblogs.com/cq1715584439/p/10759055.html
Copyright © 2020-2023  润新知