前后端的身份认证
前后端的身份认证1. Web 开发模式目前主流的 Web 开发模式有两种,分别是:
① 基于服务端渲染的传统 Web 开发模式
② 基于前后端分离的新型 Web 开发模式
1.1 服务端渲染的 Web 开发模式服务端渲染的概念:服务器发送给客户端的 HTML 页面,是在服务器通过字符串的拼接,动态生成的。
因此,客户端不 需要使用 Ajax 这样的技术额外请求页面的数据。代码示例如下:
12345app.get('/index.html', (req, res) => { const user = {name: 'zs', age: 20} const html = `<h1>姓名:${user.name},年龄:${user.age}` res.send(html)})
1.2 服务端渲染的优缺点优点:
① 前端耗时少。因为服务器端负责动态生成 HTML 内容,浏览器只需要直接渲染页面即可。尤其是移动端,更省电。
② 有利 ...
mongoDB简易上手(node.js版)
mongoDB简易上手
完整代码在gitee上地址:https://gitee.com/gaohan888/node-js-learning/tree/master/mongodb
1. mongoDB的环境搭建1.1数据库相关概念在一个数据库软件中可以包含多个数据仓库,在每个数据仓库中可以包含多个数据集合,每个数据集合中可以包含多条文档(具体的数据)。
1.2 Mongoose第三方包
使用Node.js操作MongoDB数据库需要依赖Node.js第三方包mongoose
使用npm install mongoose命令下载
1.3 启动mongoDB在命令行工具中运行net start mongoDB即可启动MongoDB,否则MongoDB将无法连接。
这个启动命令需要在管理员模式下运行
1.4 数据库连接使用mongoose提供的connect方法即可连接数据库。
12345const mongoose = require('mongoose');mongoose.connect('mongodb://localhost/playg ...
gulp简易上手
Gulp
所有测试代码在gitee上
地址:https://gitee.com/gaohan888/node-js-learning/tree/master/gulp
基于node平台开发的前端构建工具
将机械化操作编写成任务, 想要执行机械化操作时执行一个命令行命令任务就能自动执行了,用机器代替手工,提高开发效率。
1. Gulp的功能
项目上线,HTML、CSS、JS文件压缩合并
语法转换(es6、less …)
公共文件抽离
修改文件浏览器自动刷新
2. Gulp的使用1.使用npm install gulp下载gulp库文件
2.在项目根目录下建立gulpfile.js文件
3.重构项目的文件夹结构 src目录放置源代码文件 dist目录放置构建后文件
4.在gulpfile.js文件中编写任务.
5.在命令行工具中执行gulp任务
3. Gulp提供的方法
gulp.src():获取任务要处理的文件
gulp.dest():输出文件
gulp.task():建立gulp任务
gulp.watch():监控文件的变化
3.1 Gulp的第一个任务12345678const ...
Express
express
所有测试代码在gitee上地址:https://gitee.com/gaohan888/node-js-learning/tree/master/express
初识ExpressExpress 简介什么是 Express
官方给出的概念:Express 是基于 Node.js 平台,快速、开放、极简的 Web 开发框架。
通俗的理解:Express 的作用和 Node.js 内置的 http 模块类似,是专门用来创建 Web 服务器的。
Express 的本质:就是一个 npm 上的第三方包,提供了快速创建 Web 服务器的便捷方法。
Express 的中文官网: http://www.expressjs.com.cn/
进一步理解 Express
思考:不使用 Express 能否创建 Web 服务器?
答案:能,使用 Node.js 提供的原生 http 模块即可。
思考:既生瑜何生亮(有了 http 内置模块,为什么还有用 Express)?
答案:http 内置模块用起来很复杂,开发效率低;Express 是基于内置的 http 模块进一步封装出 ...
HTML基础&常见面试题
1. HTML常用标签1.1 排版标签排版标签主要和css搭配使用,显示网页结构的标签,是网页布局最常用的标签。
1)标题标签h其基本语法格式如下:
1234<h1> 标题文本 </h1><h2> 标题文本 </h2><h3> 标题文本 </h3><h4> 标题文本 </h4>
2)段落标签p作用语义:
可以把 HTML 文档分割为若干段落。在网页中要把文字有条理地显示出来,离不开段落标签,就如同我们平常写文章一样,整个网页也可以分为若干个段落,而段落的标签就是
1<p> 文本内容 </p>
是HTML文档中最常见的标签,默认情况下,文本在一个段落中会根据浏览器窗口的大小自动换行。
3)水平线标签hr在网页中常常看到一些水平线将段落与段落之间隔开,使得文档结构清晰,层次分明。这些水平线可以通过插入图片实现,也可以简单地通过标签来完成,就是创建横跨网页水平线的标签。其基本语法格式如下:
1<hr/>是单标签
...
CSS基础&面试题精选
1. CSS复合选择器子元素选择器作用:
子元素选择器只能选择作为某元素**子元素(亲儿子)**的元素。
其写法就是把父级标签写在前面,子级标签写在后面,中间跟一个 > 进行连接
语法:
1234.class>h3 { color:red; font-size:14px;}
这里的子 指的是 亲儿子 不包含孙子 重孙子之类。
白话:
123比如:.demo > h3 { color: red;} 说明 h3 一定是demo 亲儿子。demo 元素包含着h3。
交集选择器条件:
交集选择器由两个选择器构成,找到的标签必须满足:既有标签一的特点,也有标签二的特点。
其中第一个为标签选择器,第二个为class选择器,两个选择器之间不能有空格,如h3.special。
记忆技巧:
交集选择器 是 并且的意思。 即…又…的意思
比如:p.one 选择的是: 类名为 .one 的 段落标签。
并集选择器(重点)任何形式的选择器(包括标签选择器、class类选择器id选择器等),都可以作为 ...
js 基础笔记
1. javascript中的数据类型在JavaScript中,我们可以分成两种类型:
基本类型
复杂类型
两种类型的区别是:存储位置不同
一、基本类型基本类型主要为以下6种:
Number
String
Boolean
Undefined
null
symbol
Number数值最常见的整数类型格式则为十进制,还可以设置八进制(零开头)、十六进制(0x开头)
123let intNum = 55 // 10进制的55let num1 = 070 // 8进制的56let hexNum1 = 0xA //16进制的10
浮点类型则在数值汇总必须包含小数点,还可通过科学计数法表示
1234let floatNum1 = 1.1;let floatNum2 = 0.1;let floatNum3 = .1; // 有效,但不推荐let floatNum = 3.125e7; // 等于 31250000
在数值类型中,存在一个特殊数值NaN,意为“不是数值”,用于表示本来要返回数值的操作失败了(而不是抛出错误)
12console.log(0/0); // NaNconsole ...
Promise的用法&原理&手写实现
1. promise 入门简介Promise 是用来解决异步编程的问题。
1.1 JS 中分同步Api 和 异步Api。同步API:只有当前API执行完成后,才能继续执行下一个API
1234for (let i = 0; i < 10000; i++) { console.log(i);}console.log('同步代码执行');
只有上面一万行数值打印完,才会打印’同步代码执行’
异步API:当前API的执行不会阻塞后续代码的执行
12345console.log('before');setTimeout( () => { console.log('last');}, 2000);console.log('after');
setTimeout定时器要在2s秒后才执行,js引擎不会卡在定时器这,会先执行同步代码,等同步代码执行完再执行异步代码定时器(在这只需要先记住定时器是异步代码)
1.2 同步API, 异步API的区别( 获取返 ...
ES6 笔记
1. ES6中数组新增了哪些扩展?
Rest 参数与 Spread 语法在 JavaScript 中,很多内建函数都支持传入任意数量的参数。
例如:
Math.max(arg1, arg2, ..., argN) —— 返回参数中的最大值。
Object.assign(dest, src1, ..., srcN) —— 依次将属性从 src1..N 复制到 dest。
……等。
在本章中,我们将学习如何编写支持传入任意数量参数的函数,以及如何将数组作为参数传递给这类函数。
Rest 参数 ...在 JavaScript 中,无论函数是如何定义的,你都可以在调用它时传入任意数量的参数。
例如:
12345function sum(a, b) { return a + b;}alert( sum(1, 2, 3, 4, 5) );
虽然这里这个函数不会因为传入过多的参数而报错。但是,当然,只有前两个参数被求和了。
我们可以在函数定义中声明一个数组来收集参数。语法是这样的:...变量名,这将会声明一个数组并指定其名称,其中存有剩余的参数。这三个点的语义就是“收集剩 ...
vue基础用法&基础原理整理
vue基础用法&基础原理整理1. vue基础知识和原理1.1 初识Vue
想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象
demo容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法
demo容器里的代码被称为【Vue模板】
Vue实例和容器是一一对应的
真实开发中只有一个Vue实例,并且会配合着组件一起使用
是Vue的语法:插值表达式,可以读取到data中的所有属性
一旦data中的数据发生改变,那么页面中用到该数据的地方也会自动更新(Vue实现的响应式)
代码
123456789101112131415161718<!-- 准备好一个容器 --><div id="demo"> <h1>Hello,{{name.toUpperCase()}},{{address}}</h1></div><script type="text/javascript" > ...