这里给大家分享下后端人员如果利用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. appium定位安装包启动类名称

    cmd输入:adb logcat > d:/1.txt  然后运行APP,关闭APP,到D盘查找文件1,Ctrl+F,输入LAUNCHER,定位启动类,如下图所示位置 即为,eclipse调用A ...

  2. 2 pygraphviz在windows10 64位下的安装问题(反斜杠的血案)

    可以负责任的说,这篇文档是windows10安装pygraphviz中,在中文技术网站中最新的文档,没有之一.是自己完全结合各种问题,包括调试等,总结出来的. 问题来源:主要是可视化RvNN网络的树结 ...

  3. 关于Spring MVC中的表单标签库的使用

    普通的MVC设计模式中M代表模型层,V代表视图层,C代表控制器,SpringMVC是一个典型的MVC设置模式的框架,对于视图和控制器的优化很多,其中就有与控制器相结合的JSP的表单标签库. 我们先简单 ...

  4. 网络虚拟化技术 -- LXC TUN/TAP MACVLAN MACVTAP

    Linux的网络虚拟化是LXC项目中的一个子项目,LXC包括文件系统虚拟化,进程空间虚拟化,用户虚拟化,网络虚拟化,等等 [ LXC内核命名空间 ],这里使用LXC的网络虚拟化来模拟多个网络环境. 创 ...

  5. git操作合集

    目录 安装 下载 本地配置 创建用户凭证ssh 忽略文件 基础操作 新建仓库 克隆仓库 获取更新 推送更新 查看历史 版本回退 分支 别名 linux服务器 疑难问题 清除历史大文件 安装 下载 下载 ...

  6. Visual Staudio 2015 打开指定文件,定位到指定文件目录下

    Visual Staudio 2015 项目定位文件位置 每次使用的Visual Staudio 2015 写代码的时候总是打开了.cs文件或xaml文件时, 还要手动去找该 文件位置,每次都要翻好大 ...

  7. asp.net 服务器控件的 ID,ClientID,UniqueID 的区别

    1.简述 ID是设计的时候自己所指定的ID,是我们分配给服务器控件的编程标识符,我们常常使用this.controlid来寻找控件,那么这个controlid就是这里所说的ID. ClientID是由 ...

  8. 关于Unity3d的世界空间和本地空间的一点思考

    最近才开始学Unity3d,被这个本地空间和世界空间搞得有点晕头转向的.于是花了一点时间随便写了一点代码加深理解.代码如下: public class MoveX : MonoBehaviour { ...

  9. 深入浅出SharePoint——常用的url命令

    ?&displaymode=design  页面可编辑

  10. [TOP10]最受欢迎的10个Metasploit模块和插件

    很多人都想知道最受欢迎的10个Metasploit模块和插件是什么(TOP10),事实上这是一个很难回答的问题,因为什么才叫"Top"?我想每个人都有每个人的看法.于是我们通过调查 ...