浅谈nodejs中HTTP模块应用
这里给大家分享下后端人员如果利用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模块应用的更多相关文章
- 60.浅谈nodejs中的Crypto模块
转自:https://www.cnblogs.com/c-and-unity/articles/4552059.html node.js的crypto在0.8版本并没有改版多少,这个模块的主要功能是加 ...
- [转]浅谈电路设计中应用DDR3处理缓存问题
本文转自:浅谈电路设计中应用DDR3处理缓存问题_若海人生的专栏-CSDN博客 DDR系列SDRAM存储芯片的高速率.高集成度和低成本使其理所当然成为存储芯片中的一霸.在PC和消费电子领域自是如此,它 ...
- 浅谈Java中的equals和==(转)
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...
- 浅谈Linux中的信号处理机制(二)
首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- 浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...
- 转【】浅谈sql中的in与not in,exists与not exists的区别_
浅谈sql中的in与not in,exists与not exists的区别 1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表 ...
- Nodejs中cluster模块的多进程共享数据问题
Nodejs中cluster模块的多进程共享数据问题 前述 nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核 ...
- 浅谈iOS中的userAgent
浅谈iOS中的userAgent User-Agent(用户代理)字符串是Web浏览器用于声明自身型号版本并随HTTP请求发送给Web服务器的字符串,在Web服务器上可以获取到该字符串. 在公司产 ...
随机推荐
- appium定位安装包启动类名称
cmd输入:adb logcat > d:/1.txt 然后运行APP,关闭APP,到D盘查找文件1,Ctrl+F,输入LAUNCHER,定位启动类,如下图所示位置 即为,eclipse调用A ...
- 2 pygraphviz在windows10 64位下的安装问题(反斜杠的血案)
可以负责任的说,这篇文档是windows10安装pygraphviz中,在中文技术网站中最新的文档,没有之一.是自己完全结合各种问题,包括调试等,总结出来的. 问题来源:主要是可视化RvNN网络的树结 ...
- 关于Spring MVC中的表单标签库的使用
普通的MVC设计模式中M代表模型层,V代表视图层,C代表控制器,SpringMVC是一个典型的MVC设置模式的框架,对于视图和控制器的优化很多,其中就有与控制器相结合的JSP的表单标签库. 我们先简单 ...
- 网络虚拟化技术 -- LXC TUN/TAP MACVLAN MACVTAP
Linux的网络虚拟化是LXC项目中的一个子项目,LXC包括文件系统虚拟化,进程空间虚拟化,用户虚拟化,网络虚拟化,等等 [ LXC内核命名空间 ],这里使用LXC的网络虚拟化来模拟多个网络环境. 创 ...
- git操作合集
目录 安装 下载 本地配置 创建用户凭证ssh 忽略文件 基础操作 新建仓库 克隆仓库 获取更新 推送更新 查看历史 版本回退 分支 别名 linux服务器 疑难问题 清除历史大文件 安装 下载 下载 ...
- Visual Staudio 2015 打开指定文件,定位到指定文件目录下
Visual Staudio 2015 项目定位文件位置 每次使用的Visual Staudio 2015 写代码的时候总是打开了.cs文件或xaml文件时, 还要手动去找该 文件位置,每次都要翻好大 ...
- asp.net 服务器控件的 ID,ClientID,UniqueID 的区别
1.简述 ID是设计的时候自己所指定的ID,是我们分配给服务器控件的编程标识符,我们常常使用this.controlid来寻找控件,那么这个controlid就是这里所说的ID. ClientID是由 ...
- 关于Unity3d的世界空间和本地空间的一点思考
最近才开始学Unity3d,被这个本地空间和世界空间搞得有点晕头转向的.于是花了一点时间随便写了一点代码加深理解.代码如下: public class MoveX : MonoBehaviour { ...
- 深入浅出SharePoint——常用的url命令
?&displaymode=design 页面可编辑
- [TOP10]最受欢迎的10个Metasploit模块和插件
很多人都想知道最受欢迎的10个Metasploit模块和插件是什么(TOP10),事实上这是一个很难回答的问题,因为什么才叫"Top"?我想每个人都有每个人的看法.于是我们通过调查 ...