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

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

 const http = require("http");
const fs = require("fs");
const url=require("url");
const path = require("path");
const util = require("./util");
const Mock = require("./src/app/mock/node_modules/mockjs"); //创建一个服务
let arr = [];//用来存放下面建立的json文件的数据
const server = http.createServer((request, response) => {
//首先我们会接受静态请求和接口请求 通过封装函数来实现对其不同的操作
//首先我们对请求进行分类
let filePath = request.url == "/" ? "login.html" : url.parse(request.url).pathname;
//console.log(filePath)
if (path.extname(filePath)) {
//存在后缀就是静态资源文件请求
util.fileRead(path.join("./src", filePath), response)
} else if (filePath == "/api/login") { //声明一个对象给前端返回后端处理的数据请求结果 let opj = {
code: 1,
msg: "请求成功"
}
//接受前端给我发过来的请求体
util.getData(request, (data) => {
console.log(data, "前端请求数据结果")
//登录的ajax请求
//我们利用一个json文件模拟本地数据库
//首先判断我们这个数据库存在不存在
if (fs.existsSync("./data.json")) {
//存在的情况下
//和数据库的数据进行比较
//读取数据库文件资源
let dataAll = JSON.parse(fs.readFileSync("./data.json", "utf8"));
data = JSON.parse(data)
//console.log(data, "dengluqingqiu............")
//检验是不是账号密码不对
let flag = dataAll.find(item => {
return item.user == data.user && item.pwd == data.pwd;
});
let flag1 = dataAll.find(item => {
return item.user == data.user;
})
//console.log(flag, "**************")
//检测是不是这个名字就不存在了
if (!flag) {
//找不到证明验证失败
opj.code = 0;
opj.msg = "用户名或者密码输入错误"
}
if (!flag1) {
opj.code = 0;
opj.msg = "该用户没有被注册"
} } else {
//不存在的情况下
opj.code = 0;
opj.msg = "该用户没有被注册"
}
//返回后端处理结果
//console.log(JSON.stringify(opj))
//console.log(opj, "--------------------")
response.end(JSON.stringify(opj))
})
} else if (filePath == "/api/register") {
//声明一个对象给前端返回后端处理的数据请求结果
let opj = {
code: 1,
msg: "注册成功"
}
//注册页面发来的ajax请求
//接受ajax传过来的数据
util.getData(request, data => {
//console.log(data, "前端请求数据结果")
console.log(data, "这里")
data = JSON.parse(data);
let f = arr.some(item => {
return item.user == data.user
})
if (!f) {
arr.push(data);
}
//首先在这个请求中我们还是利用一个json文件代替数据库
//判断这个文件是不是存在 不存在创建
if (!fs.existsSync("./data.json")) {
//不存在的情况下
//创建
if (arr.length) {
fs.writeFileSync("./data.json", JSON.stringify(arr));
}
} else {
//存在的情况下
//获取这个文件收据进行遍历
let read = JSON.parse(fs.readFileSync("./data.json", "utf8"));
let flag = read.some(item => {
return item.user == data.user
});
if (flag) {
opj.code = 0;
opj.msg = "该用户已被注册过"
}
fs.writeFileSync("./data.json", JSON.stringify(arr));
}
response.end(JSON.stringify(opj))
}) } else if (filePath === "/api/main") {
util.getData(request,data=>{
//console.log(data,"**********");
let {page,limit}=data;
//利用mock随机生成图片
let images=Mock.Random.image("200x200","#f00","chen");
//利用传过来的参数随机生成一个数据给前端返回回去
let mockData=Mock.mock({
[`list|${limit}`]:[
{
title:'@ctitle',
'id|+1':(page-1)*limit,
img:images
}
]
});
//将这个随机创造的数据返回给前端
response.end(JSON.stringify(mockData))
})
}
}); //监听这个服务
server.listen(8000, () => {
console.log(server.address().port)
})

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

 const url = require("url");
const fs = require("fs");
module.exports={
fileRead(rootPath,response){
//此函数是对文件的读取 与判断文件是否存在滴
if(fs.existsSync(rootPath)){
//文件存在的情况 读取返回
fs.readFile(rootPath,(err,data)=>{
if(err) throw err;
response.end(data.toString())
})
}else{
//文件不存在的情况下 改状态码
response.ststusCode=404;
response.end()
}
},
getData(request,callBack){
//第一个参数是请求体 第二个参数是回调函数
//封装一个函数用来判断是get请求还是post请求
if(request.method==="POST"){
let data="";
request.on("data",chunk=>{
data+=chunk;
});
request.on("end",()=>{
callBack(data)
})
}else if(request.method=="GET"){
//注意这里第二个参数加个true可以 很有灵性
//将page=1&limit=15转换成对象 方便了后端人员的数据处理
let data=url.parse(request.url,true).query;
callBack(data)
}
}
}

    其实主要思想也就那几个

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

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

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

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

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

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

会从缓存中读取的

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

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

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

浅谈nodejs中HTTP模块应用的更多相关文章

  1. 60.浅谈nodejs中的Crypto模块

    转自:https://www.cnblogs.com/c-and-unity/articles/4552059.html node.js的crypto在0.8版本并没有改版多少,这个模块的主要功能是加 ...

  2. [转]浅谈电路设计中应用DDR3处理缓存问题

    本文转自:浅谈电路设计中应用DDR3处理缓存问题_若海人生的专栏-CSDN博客 DDR系列SDRAM存储芯片的高速率.高集成度和低成本使其理所当然成为存储芯片中的一霸.在PC和消费电子领域自是如此,它 ...

  3. 浅谈Java中的equals和==(转)

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...

  4. 浅谈Linux中的信号处理机制(二)

    首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...

  5. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  6. 浅谈Java中的equals和==

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...

  7. 转【】浅谈sql中的in与not in,exists与not exists的区别_

    浅谈sql中的in与not in,exists与not exists的区别   1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表 ...

  8. Nodejs中cluster模块的多进程共享数据问题

    Nodejs中cluster模块的多进程共享数据问题 前述 nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核 ...

  9. 浅谈iOS中的userAgent

    浅谈iOS中的userAgent   User-Agent(用户代理)字符串是Web浏览器用于声明自身型号版本并随HTTP请求发送给Web服务器的字符串,在Web服务器上可以获取到该字符串. 在公司产 ...

随机推荐

  1. 2.MySQL 数据类型

    MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准S ...

  2. oracle 找回DROP掉的表

    select * from pan ;   --有数据 drop table pan;        --删除表 select * from pan ;   --表或视图不存在 flashback t ...

  3. 《C++ Primer Plus》读书笔记之三—循环与关系表达式

    第五章 循环与关系表达式 1.表达式是值或者值与操作符的结合,每个C++表达式都有值.表达式到语句的转换只要加一个分号就可以完成.但是,反过来,从语句中删除分号,并不一定能将它转化成表达式. 2.前缀 ...

  4. 安装office2016和激活。

    严重声明:条件宽裕的同学可以购买正版.请大家多多支持正版. 自己手贱,原本在电脑win10系统上安装的正版office被误删了,联系了客服人员,但是自己的微软账号也忘记了.好想下载个正版的.自己在网上 ...

  5. Attempt to load Oracle client libraries threw BadImageFormatException. This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed.

    System.Data.OracleClient 已经过时了.微软不再支持它. 因此,我建议你为. NET 使用Oracle数据提供程序:ODP.Net. 你可以从以下位置下载: 版本:Release ...

  6. 如何恢复在Windows 10中被永久删除的照片?

    照片被误删除了需要恢复?这里推荐一款软件:winutilities.使用WinUtilities文件恢复向导允许您通过简单的点击恢复已删除的照片或从Windows 10回收站中恢复被删除的照片. 恢复 ...

  7. Debian防御DDOS(简易版本)

    DDOS攻击主要还是靠硬防,不过,对于一些小的骚扰,可以采用DDoS deflate+iptables的方法减轻. ========================================== ...

  8. 51nod 1967路径定向(dfs、欧拉回路)

    1967 路径定向 基准时间限制:1.2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 给出一个有向图,要求给每条边重定向,使得定向后出度等于入度的点最多,输出答案和任意一种方案 ...

  9. Xpath提取一个标签里的所有文本

    content = etree.HTML(text) h = content.xpath('//h1') h1 = h[0].xpath('string(.)').strip()

  10. 1588. [HNOI2002]营业额统计【平衡树-splay 或 线段树】

    Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...