浅谈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服务器上可以获取到该字符串. 在公司产 ...
随机推荐
- GIT:如何管理本机的多个ssh密钥(多个远程仓库账号)
最近在学习git,首先推荐一个个人认为很不错的git教程,学习后,从git新手变成了git入门了,仍需继续努力. 廖老师的git学习教程(其他git基础知识点,本篇博客就不做介绍了,自己看教程学习吧, ...
- 三层构架 和 MVC 是什么?
作者:肖继潮链接:https://www.zhihu.com/question/24291079/answer/27339010著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 企 ...
- Word操作总结
1.竖向选择 Notepad中:先把鼠标光标放在起始位置,然后同时按 Alt+Ctrl 或Alt+shift键,然后移动鼠标选取内容. Word中只能用Alt+Shift .
- AspNetCore发布到Centos7
1.Centos安装netcore2 sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'e ...
- 巧用花生壳将局域网内的FTP和www服务器发布到互联网
一.目的:用生壳发布FTP和mail服务器到互连网. 二.网络环境:(出租房多家共用路由器上网,ADSL的1Mbps带宽,动态PPPOE拨号,帐号和密码存储在soho路由器中,路由器自动联机上网,并为 ...
- ZT android -- 蓝牙 bluetooth (二) 打开蓝牙
android -- 蓝牙 bluetooth (二) 打开蓝牙 分类: Android的原生应用分析 2013-05-23 23:57 4773人阅读 评论(20) 收藏 举报 androidblu ...
- XML序列化 System.Xml.Serialization
一.定义元数据 XML序列化常用属性:XMLRoot,XMlType.XMLText.XMLEnum等 [Serializable] [XmlRoot] public class Product { ...
- 阿里八八——预则立&&他山之石
团队计划--α版本Issues 概况 采访团队:"一起买"开发团队 采访形式:团队--团队 团队采访 内容提炼 项目选题 团队选题本身并没有大的亮点,但是可以从功能下手,多想想项目 ...
- AngularCLI介绍及配置文件主要参数含义解析
使用Angular CLI可以快速,简单的搭建一个angular2或angular4项目,是只要掌握几行命令就能构建出前端架构的最佳实践,它本质也是使用了webpack来编译,打包,压缩等构建的事情, ...
- PhoneGap 介绍
一.PhoneGap 是什么 1.PhoneGap 是一个用基于 HTML,CSS 和 JavaScript 的,创建移动跨平台移动应用程序的快速开发框架. 2.它使开发者能够利用 iPhone,An ...