06-接口项目
接口项目一、项目介绍工作中,常用开发模式为前后端分离开发模式。后端提供页面所需要的数据,前端使用特殊技术对后端服务器发起请求,获取后端提供的数据,然后渲染到页面上。 后端为前端提供数据的这套项目代码,俗称后端接口。 二、接口规划我们要实现的接口项目,其中包含:注册接口、登录接口、商品列表、商品详情、购物车、用户信息查询和修改。 有了这些接口后,我们可以实现一个比较简单的电商网站。 其中有关商品类的接口,可以规划的更加详细:商品列表分页显示、商品详情展示 购物车接口同上:添加购物车、购物车数据展示、购物车商品数量修改、购物车商品删除、清空购物车 用户接口:用户信息展示、用户信息修改、用户密码修改 项目演示: 开发环境:windows 开发工具:vscode 代码管理工具:git/gitee 项目类型:点餐系统后端接口 技术:nodejs + express + mongoose + mongodb + bcrytpsjs + jsonwebtoken + moment.js …. 三、接口实现1、准备工作1.1、模块下载安装先进行npm初始化,强制生成package.json ...
05-mongodb
mongodb一、介绍1、数据库介绍网站中所使用的数据错综复杂,各种数据之间又互相勾连,例如电商网站的商品分类、推荐商品、猜你喜欢商品、商品详情、购物车数据等等。为了方便管理,会将网站中所使用的所有数据集中在一起进行管理,方便对数据进行各种条件下的查询,实现性能的优化。 存储数据,可以选择使用文件存储,但文件的读写效率偏低,随着科技发展,到目前为止,大家公认的效率和性能较高的存储系统,就是数据库了。 数据库的数据也是存储在磁盘中的,只是有其独有的存储规律和管理办法,从计算机较角度来看,其实就是一个专业管理磁盘中数据的软件。 2、数据库分类数据库技术发展到目前为止,可以分为两大类: 关系型数据库 通常数据以表格形式存储,表格和表格之间可以设定一定的关联。 左表中的籍贯跟右表中的编号产生关联,此时,右表中的数据不允许删除,否则左表中的人员将失去籍贯,左表中不允许添加右表中不存在的籍贯,否则无法识别人员籍贯。 代表数据库:Mysql、SqlServer、Oracle。。。 非关系型数据库 非关系型数据库,通常以键值对形式存储数据,数据和数据之间没有一定的关联。 代表数据库:Mongo ...
04-常用模块和模板引擎
常用模块和模板引擎一、常用模块1、加密1npm i bcryptjs -S 使用: 12345var bcrypt = require('bcryptjs');// 加密密文 = bcryptjs.hashSync(明文[,数字]); // 数字,将使用指定的轮数生成盐并将其使用。推荐 10// 验证bcryptjs.compareSync(明文,密文); // 通过返回true,失败返回false 2、文件上传项目中免不了要进行文件的上传,例如头像的上传。在nodejs中上传文件需要依赖multer第三方模块,使用步骤如下: 下载: 1npm i multer -S 导入: 1const multer = require('multer') 配置上传选项: 123456789const storage = multer.diskStorage({ destination: function (req, file, cb) { // file中包含了上传的文件的所有信息 cb(n ...
03-express
express一、express介绍1.简介利用nodejs中http创建的服务器,在处理请求的时候,只能放在一个回调函数中,且判断也相对较为复杂。为了方便基于nodejs服务器的开发,有人对nodejs服务器的创建、请求处理等操作,进行了封装,比较常见的就是express。 可以说,express就是基于nodejs封装的一个框架,专业用于提供方便易操作的web服务器。 Express 的本质:就是一个 npm 上的第三方包,提供了快速创建 Web 服务器的便捷方法。 使用Express开发框架可以非常方便、快速的创建Web网站的服务器或API接口的服务器 官网:https://www.expressjs.com.cn/ 2、初体验下载安装: 12npm init -ynpm i express -S 使用步骤: 导入包 创建服务器 处理请求 监听端口 1234const express = require('express')const app = express()app.get(路由,回调) // get是请求方法app.listen(端口号) 二、 ...
02-HTTP协议和第三方模块
HTTP和第三方模块一、http1、介绍为什么要学习http?因为前端和后台进行交互的时候,使用的就是这个协议。 HTTP协议,叫超文本传输协议(Hypertext transfer protocol)。是一个规则,规定了浏览器和服务器之间通信的规则。 http的传输行为,共分为三个步骤: 建立连接 进行传输 断开连接 无论是哪个步骤,都是由客户端主动开始的,这样比较安全,也符合用户的心理预期。否则,服务器主动给客户端发消息会让人不寒而粟,例如:我们打开浏览器什么也没做,淘宝就主动给用户发消息开始支付。 2、三次握手客户端和服务器传输数据之前,必须先建立连接才可以,建立连接的过程,叫做三次握手。 建立连接,类似于我们平常在聊天的时候,说正事之前,会先说:’在吗’,对方回答:’在’。然后才说正事。 建立连接,就是为后续的传输做准备,所以建立连接的过程中,客户端和服务器都需要确保自己和对方都可以收发消息。 第一次握手:客户端主动给服务器发送消息,请求连接(其中会携带一些数据作为这次连接的识别符)。 第二次握手:服务器收到消息后,给客户端回应一个消息,表示已经收到要连接的请求(其中会 ...
01-node.js基础
nodejs基础一、nodejs介绍1、简介在我们此时的认知中,js是一门客户端语言,且是一门脚本语言,也就是说只能在浏览器上运行,且只能依赖HTML才能运行。 为了提高js的逼格,让js脱离浏览器和HTML也能运行,一代大神Ryan Dahl在2009年,通过分析将谷歌浏览器中V8引擎(即谷歌浏览器中的js解析器),分离出来,进行了二次封装,做出了一款软件,叫nodejs。 这个软件中可以运行js代码,且不需要依赖浏览器和HTML。 所以说,nodejs本质上是一个js除了浏览器之外的运行环境,使得js除了是一门客户端语言外,还是一门和java、php、ruby平起平坐的服务器端语言。 2、nodejs使用注意事项 nodejs实现了js代码在浏览器外执行,所以在nodejs中无法运行DOM和BOM的代码 nodejs中除了ECMAScript代码外,还内置了很多其他API nodejs让js在写前端代码的基础上,可以写后端代码,因为nodejs可以构建服务器 相关网址: https://nodejs.org/zh-cn/ http://nodejs.cn/ 3、下载安 ...
18-设计模式
设计模式和垃圾回收一、设计模式1、设计模式介绍设计模式是面向对象中反复多次出现的问题,而总结出来的最优解决方案。 例如:我们使用字面量方式创建对象,容易造成重复,这个在应用过程中是不可避免的,为了解决这个问题,我们通过一个函数来解决重复,也就是工厂函数。此时就可以把这套方案叫做工厂模式。 不同的问题,总结出的方案也是不同的。在当前的实际应用过程中,人们总结了23种设计模式。常见的设计模式有: 单例模式 组合模式 观察者模式 发布订阅模式 命令模式 代理模式 工厂模式 策略模式 适配器模式 2、单例模式单例模式是指,通过一个类衍生出的对象,只能有一个,不会有第二个,就算有第二个,跟第一个是共享同一个堆地址的。 单例模式解决的问题是,当我们多次调用一个类中方法的时候,通常需要实例化多次,然后调用方法。但其实每次使用的方法有一个类就已经能用了,实例化多次,得到的多个实例化对象,造成了内存浪费,所以需要单例模式: 1class Single{} 将一个类放在全局,不可避免的,就会被实例化多次,所以,放在全局不能实现单例模式。 12345function fn() ...
17-闭包与继承
闭包和设计模式一、闭包1、闭包介绍闭包不是新的语法,是函数嵌套后产生一种神奇的场景。 例: 123456789101112131415161718192021// 普通的函数没有嵌套function fn() { var a = 1 console.log(a++);}fn() // 1fn() // 1fn() // 1// 有函数嵌套function big() { var a = 1 function small() { console.log(a++); } return small}var s = big()s() // 1s() // 2s() // 3 函数作用域嵌套,造成变量执行完不被销毁的场景就叫闭包。 2、闭包形成的原理js代码执行,都在内存的调用栈内存中进行,函数调用后,会在调用栈中先创建一个执行空间,局部变量,会在执行空间中创建,然后执行代码,当函数代码执行接收后,会从调用栈中销毁这个执行空间。 所以,没有函数嵌套的时候,函数中的局部变量,在执行结束后 ...
16-Object方法
对象方法一、Object原型方法Object构造函数对应的原型中有很多方法,比较实用,如下: 1console.log(Object.prototype) 图示: 1、hasOwnProperty用于判断某个对象是否具有某个自带属性。自带属性,指的是自身就有的,而非继承来的,语法: 1对象.hasOwnProperty(非继承属性) // 返回布尔值,true表示是,false表示否 例: 123456789101112function Person(name, age) { this.name = name this.age = age}Person.prototype.sex = '男'var man = new Person('张三', 12)console.log( man.hasOwnProperty('name') ); // trueconsole.log( man.hasOwnProperty('sex') ); // falseconsole.log ...
15-面向对象案例
面向对象案例一、放大镜1、效果演示 2、布局分析通过观察京东等电商网站的放大镜,看到右边的大图会将原本空白区域的内容覆盖显示,所以右边大图,选择从左边的盒子中定位到右边。 2.1、结构123456789101112131415161718<!-- 放大镜盒子开始 --><div class="enlarge"> <!-- 左边盒子开始 --> <div class="middle"> <!-- 中等图片 --> <img src="./images/middle1.jpg" alt=""> <!-- 遮罩 --> <div class="mask"></div> <!-- 右边大盒子 --> <div class="big"></div ...