zoukankan      html  css  js  c++  java
  • 浅谈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页面即可

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

    一条不甘于平凡的咸鱼分享
  • 相关阅读:
    Winform读取app.config文件
    判断本机只能运行一个winform程序
    [导入][链接] Top 10: The best, worst... and craziest uses of RFID
    [导入][Tips] 在Ubuntu下限制本机使用的网络带宽
    [导入][一点一滴学英语] 20061205
    [导入][链接] Linux Distribution Chooser
    [导入][链接] Open Source Java Clustering
    [导入][链接] 关于Vista的关机选项
    [导入]Drip, Transfusion, Perfusion还是Infusion?关于一个词的翻译
    [导入][阅读] "Computer Programmer" vs. "Software Developer"
  • 原文地址:https://www.cnblogs.com/cq1715584439/p/10759055.html
Copyright © 2011-2022 走看看