已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前端课程系列Express课程尚硅谷前端研究院版本:V 1.1第1章:Express简介1.1 Express是什么Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你快速创建各种 Web 和移动设备应用。简单来说Express就是运行在node中的用来搭建服务器的模块。1.2 Express的使用1.2.1 下载npm i express -save 安装express并添加到依赖项1.2.2 第一个服务器/引入express模块var express = require(express)/创建应用对象var app = express()/配置静态资源app.use(express.static(public)/开启服务器,监听3000端口app.listen(3000)第2章:路由(Route)2.1 Route是什么路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。路由是由一个 URI、HTTP 请求(GET、POST等)和若干个句柄组成的。2.2 Route的定义我们可以将路由定义为三个部分:第一部分:HTTP请求的方法(get或post)第二部分:URI路径第三部分: 回调函数2.3 Route的实现Express中提供了一系列函数,可以让我们很方便的实现路由:app.(path,callback) 语法解析:method指的是HTTP请求方法,比如:app.get()app.post()path指要通过回调函数来处理的URL地址callback参数是应该处理该请求并把响应发回客户端的请求处理程序2.4 Route的实例/引入expressvar express = require(express)/创建应用对象var app = express()/配置路由app.get(/index, function (request, response) console.log(路由index收到get请求) response.send(这里是路由返回的信息,/hello收到了get请求)app.post(/index, function (request, response) console.log(路由index收到post请求) response.send(这里是路由返回的信息,/hello收到了post请求)/启动服务器app.listen(3000, function () console.log(服务器启动成功,监听3000端口)2.5 Route的运行流程当Express服务器接收到一个HTTP请求时,它会查找已经为适当的HTTP方法和路径定义的路由如果找到一个,Request和Response对象会被创建,并被传递给路由的回调函数我们便可以通过Request对象读取请求,通过Response对象返回响应Express中还提供了all()方法,可以处理两种请求。2.6 Request对象2.6.1 Request对象是什么Request对象是路由回调函数中的第一个参数,代表了用户发送给服务器的请求信息通过Request对象可以读取用户发送的请求包括URL地址中的查询字符串中的参数,和post请求的请求体中的参数。2.6.2 Request对象属性和方法属性/方法描述request.query获取get请求查询字符串的参数,拿到的是一个对象request.params获取get请求参数路由的参数,拿到的是一个对象request.body获取post请求体,拿到的是一个对象(要借助一个中间件)request.get(xxxx)获取请求头中指定key对应的value2.7 Response对象2.7.1Response对象是什么Response对象是路由回调函数中的第二个参数,代表了服务器发送给用户的响应信息。通过Response对象可以设置响应报文中的各个内容,包括响应头和响应体。2.7.2 Response对象的属性和方法属性/方法描述response.send()给浏览器做出一个响应response.end()给浏览器做出一个响应(不会自动追加响应头)response.download()告诉浏览器下载一个文件response.sendFile()给浏览器发送一个文件response.redirect()重定向到一个新的地址(url)response.set(header,value)自定义响应头内容response.get()获取响应头指定key对应的valueres.status(code)设置响应状态码第3章:中间件3.1中间件简介Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架:从本质上来说,一个 Express 应用就是在调用各种中间件。中间件(Middleware) 是一个函数,它可以访问请求对象(request), 响应对象(response), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。3.2中间件功能1) 执行任何代码。2) 修改请求和响应对象。3) 终结请求-响应循环。4) 调用堆栈中的下一个中间件。3.3 中间件的分类1) 应用级中间件(过滤非法的请求,例如防盗链)2) 第三方中间件(通过npm下载的中间件,例如body-parser)3) 内置中间件(express内部封装好的中间件)4) 路由器中间件 (Router)3.4中间件实例/引入expressvar express = require(express)/创建应用对象var app = express()/配置静态资源app.use(express.static(public)/中间件,没有挂载路径,应用的每个请求都会执行该中间件app.use(function (req, res, next) console.log(这是中间件的响应) /如果不调用next方法,下面路由将不起作用 next()/配置路由app.get(/index, function (req, res) console.log(路由index收到get请求) res.send(这里是路由返回的信息,/hello收到了get请求)app.post(/index, function (req, res) console.log(路由index收到post请求) res.send(这里是路由返回的信息,/hello收到了post请求)/启动服务器app.listen(3000, function () console.log(服务器启动成功,监听3000端口)第4章:Router路由器4.1 Router是什么Router 是一个完整的中间件和路由系统,也可以看做是一个小型的app对象。4.2 为什么使用Router为了更好的分类管理route4.3 Router的使用/引入express模块var express = require(express);/引入body-parser模块var bodyParser = require(body-parser);/引入Users模型对象var Users = require(./models/Users);/创建router对象var router = express.Router();/解析请求体,将参数挂在到req.bodyrouter.use(bodyParser.urlencoded(extended: false);router.post(/login, function (req, res) var username = req.body.username; var password = req.body.password; Users.findOne(username: username, function (err, data) if (!err & data & data.password = password) res.send(恭喜您登录成功); else res.send(用户名或密码错误); )router.post(/regist, function (req, res) /获取用户提交的参数 var username = req.body.username; var password = req.body.password; var rePassword = req.body.rePassword; var email = req.body.email; /* 1. 正则验证(-) 2. 密码和确认密码是否一致 3. 去数据库中查找有无此用户名 4. 插入数据 */ /判断密码和确认密码是否一致 if (password != rePassword) res.send(两次密码输入不一致,请重新输入); return /去数据库中查找有无此用户名 Users.findOne(username: username, function (err, data) if (!err) /* data 如果查到了 返回文档对象 如果没找到 返回null */ if (data) / 查到了指定用户名 res.send(data.username + 用户名已被注册请重新输入); else / 没有找到指定有户名,将用户信息插入到数据库中 Users.create( username: username, password: password, email: email , function (err) if (!err) res.send(恭喜您,注册成功了); else res.send(error); ) else res.send(error); )/暴露路由器对象module.exports = router第5章:EJS模板5.1 EJS是什么EJS是一个高效的 JavaScript 模板引擎。模板引擎是为了使用户界面与业务数据(内容)分离而产生的。简单来说,使用EJS模板引擎就能动态渲染数据。5.2 EJS的使用1) 下载安装 npm i ejs -save2) 配置模板引擎app.set(view engine , ejs);3) 配置模板的存放目录app.set(views,./views)4) 在views目录下创建模板文件xxx.ejs5) 使用模板,通过response来渲染模板response(模板名称, 数据对象)5.3 EJS语法以下是一个ejs文件: DocumentHello EJS,这是我的第一个EJS/ 执行其中的JS代码/ 输出转义的数据到模板上用户名 : / 输出非转义的数据到模板上用户名 : / 可以包含JS代码与下面拼接在一起a的值是20%for(var i=0 ; i老师真帅啊!第6章:会话控制6.1会话控制是什么HTTP协议是一个无状态的协议,它无法区分多次请求是否发送自同一客户端。而我们在实际的使用中,却又大量的这种需求,我们需要通过会话的控制来解决该问题。6.2 cookie6.2.1 cookie是什么cookie本质是一个存储在浏览器的文本,随着http请求自动传递给服务器。也可以说cookie是一个头(请求头/响应头):服务器以响应头的形式将Cookie发送给浏览器浏览器收到以后会自动将Cookie保存浏览器再次访问服务器时,会以请求头的形式将Cookie发回服务器就可以通过检查浏览器发回的Cookie来识别出不同的浏览器6.2.2 cookie的不足各个浏览器对cookie的数量和大小都有不同的限制,这样就导致我们不能在Cookie中保存过多的信息。一般数量不超过50个,单个大小不超过4kb。cookie是由服务器发送给浏览器,再由浏览器将cookie发回,如果cookie较大会导致发送速度非常慢,降低用户的体验。6.2.3 cookie的使用通过配置cookie-parser中间件,可以将cookie解析为一个对象,并且添加为req的cookies属性,使用步骤:1) 下载安装npm i cookie-parser -save2) 引入var cookieParser = require(cookie-parser);3) 设置为中间件app.use(cookieParser();4) 创建Cookieres.cookie(username,sunwukong , maxAge:15000);/设置一个有效期为1天的cookieres.cookie(username,sunwukong , maxAge:1000*60*60*24);/设置一个永久有效的cookieres.cookie(username,sunwukong , maxAge:1000*60*60*24*365*10);5) 修改Cookie/Cookie一旦发送给浏览器,就不能再修改了/但是我们可以使用同名的cookie来替换已有cookieres.cookie(username,zhubajie);6) 删除Cookie/可以通过通过使用一个立即失效的cookie来替换cookie的形式来删除cookieres.cookie(username,11,maxAge:0);/用来删除一个cookieres.clearCookie(“username”)用来删除一个指定cookie6.3 session6.3.1 session是什么Session 是一个对象,存储特定用户会话所需的属性及配置信息。6.3.2 session运作流程我们可以在服务器中为每一次会话创建一个对象,然后每个对象都设置一个唯一的id,并将该id以cookie的形式发送给浏览器,然后将会话中产生的数据统一保存到这个对象中,这样我们就可以将用户的数据全都保存到服务器中,而不需要保存到客户端,客户端只需要保存一个id即可。6.3.3 session的使用1) 下载安装npm i connect-mongo express-session -save2) 引入模块var session = require(express-session);3) 将其配置为express-session的默认的持久化仓库var MongoStore = require(connect-mongo)(session);4) 设置为中间件app.use(session( name: id22, /设置cookie的name,默认值是:connect.sid secret: atguigu, /参与加密的字符串(又称签名) saveUninitialized: false, /是否为每次请求都设置一个cookie用来存储session的id resave: true ,/是否在每次请求时重新保存session store: new MongoStore( url: mongodb:/localhost:27017/test-app, touchAfter: 24 * 3600 / 24小时之内只修改一次 )
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年南宁市良庆区政务服务中心(窗口人员)招聘笔试参考题库及答案详解
- 2026年甘肃省庆阳市工会人员招聘考试备考试题及答案详解
- 2026年深圳市龙岗区工会人员招聘考试备考试题及答案详解
- 2026年连云港市连云区工会人员招聘笔试模拟试题及答案详解
- 2026年西宁市城东区工会人员招聘笔试模拟试题及答案详解
- 2026年辽宁省医疗系统事业编人员招聘笔试参考题库及答案详解
- 2026年芜湖市鸠江区工会人员招聘考试参考试题及答案详解
- 2026年杭州市江干区医疗系统事业编人员招聘笔试备考试题及答案详解
- 2026年吕梁地区离石区政务服务中心(窗口人员)招聘考试模拟试题及答案详解
- 2026年福州市仓山区政务服务中心(窗口人员)招聘考试备考试题及答案详解
- 法定代表人变更登记承诺书
- 人教版七年级劳动教育上册全册教案
- 2025年湖南长沙市食品药品检验所招聘14人历年高频重点提升(共500题)附带答案详解
- 肩周炎的中医推拿治疗课件
- 《慢性阻塞性肺疾病急性加重(AECOPD)诊治中国专家共识(2023年修订版)》解读
- 家庭教育讲师班培训
- 犬猫产科疾病 子宫蓄脓(宠物疾病防治课件)
- 铁路电务段运用PDCA循环减少合福高铁CNTT道岔缺口视频监测误报警QC成果汇报书
- 超滤反渗透操作维护手册
- 技术标标书范本
- YS/T 830-2012正丁基锂
评论
0/150
提交评论