浅谈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服务器上可以获取到该字符串. 在公司产 ...
随机推荐
- 通过注解实现Spring 声明式事务管理
小Alan接着上一篇Spring事务管理入门与进阶做一些补充,如果对Spring事务管理还不了解的可以看看上一篇文章. 实例 在我们开始之前,至少有两个数据库表是至关重要的,在事务的帮助下,我们可以实 ...
- zabbix连不上数据库
[root@localhost etc]# tail -f /var/log/zabbix_server.log 1267:20130722:195451.493 [Z3001] connection ...
- Visual Studio 2017RC 版本相关资料
Visual Studio 2017 RC版本说明 1.社区版 Visual Studio Community 2017 RC Visual Studio Community 2017 RC 是针对个 ...
- course & time
- asp.net生成PDF文件参考 .
TextSharp 是用来生成 PDF 的一个组件,在 1998 年夏天的时候,Bruno Lowagie ,iText 的创作者,参与了学校的一个项目,当时使用 HTML 来生成报告,但是,使用 ...
- Android 手机 黑域
黒域地址下载: http://pan.baidu.com/s/1bDYerc 连接手机,选择USB使用方式为“用作MIDI设备“ 0. (手机) 打开黑域,阅读向导1. (手机) 打开黑域,按屏幕提示 ...
- C++通过Callback向C#传递数据
现在比较流行C#与C++融合:C#做GUI,开发效率高,C++做运算,运行效率高,二者兼得. 但是C++与C#必然存在数据交互,C#与C++dll的数据交互从来都是一个让人头疼的问题. 从调用方式看也 ...
- 35、XpathNavigator Xpath导航器 System.Xml.XPath;
XPathNavigator类包含移动和选择XML所需元素的所有方法. 一.创建: a.如果是从XPathDocument中创建,则是只读的,只能浏览数据: b.如果是从XmlDocument中创建 ...
- GET POST 传值与接收案例
第一种:GET传递 前台 ajax GET 传递 :即在请求的地址后面加上参数,URL地址长度有显示,安全性低 后台接收:Request.QueryString[“参数名字”]! 例如: fu ...
- win10里如何在中文输入法里添加美式键盘
在控制面板打开“时钟.语言和区域”设置界面,选中“语言”设置 “语言”设置里点击“添加语言” 在添加语言设置里选择“英语”,并点击“打开”按钮,在“区域变量”设置页面里选择“英语(美国)” ,并点击 ...