Express框架请求与响应、Express页面

代码 代码 1340 人阅读 | 0 人回复

<
  上一篇有闭Express框架的内乱容:Node.js – Express框架、路由、中心件
欢送进修交换!!!
连续更新中…

文章目录




1. Express恳求处理惩罚

1.1 构建路由模块化

为了打点正在一个项目中路由浩瀚,没有便利办理那个成绩,便提出了将路由停止分类,将差别种别的路由安排正在差别的模块中,便利办理。
创立模块化路由的根底代码
  1. const express = require(&#39;express&#39;);
  2. // 创立网站效劳器
  3. const app = express();
  4. // 创立路由工具
  5. const home = express.Router();   //Router()为express下的一个办法,感化是用去创立路由的,返回值是一个路由工具
  6. // 为路由工具停止婚配途径,当客户端会见甚么样的途径时才利用甚么样的路由去处置那个恳求
  7. app.use(&#39;/home&#39;,home);      //第一个参数是恳求途径,第两个参数要通报路由工具
  8. // 以上为一级路由,详细恳求处置函数要正在两级路由下停止处置
  9. // 同时一级路由也有get战post方法,经由过程此方法创立两级路由
  10. // 正在home路由下持续创立两级路由
  11. home.get(&#39;/index&#39;,(req,res) => {
  12.     // 途径为/home/index
  13.     res.send(&#39;欢送去到两级路由页里&#39;)
  14. })
复造代码
构建模块化路由
home.js文件中:
  1. // 构建模块化路由
  2. const express = require(&#39;express&#39;);
  3. const home = express.Router();
  4. home.get(&#39;/index&#39;,(req,res) => {
  5.     res.send(&#39;欢送去到尾页&#39;)
  6. });
  7. module.export = home;    //对当前路由模块停止导出
复造代码
admin.js文件中:
  1. // 构建模块化路由
  2. const express = require(&#39;express&#39;);
  3. const admin = express.Router();
  4. admin.get(&#39;/index&#39;,(req,res) => {
  5.     res.send(&#39;欢送去到办理页里&#39;)
  6. });
  7. module.export = admin;    //对当前路由模块停止导出
复造代码
正在app.js文件中:
  1. // 引进express框架
  2. const express = require(&#39;express&#39;);
  3. // 创立网站效劳器
  4. const app = express();
  5. const home = require(&#39;./router/home&#39;);   //.js那个后缀能够省略
  6. const admin = require(&#39;./router/admin&#39;)
  7. // 利用app.use办法停止途径的婚配
  8. app.use(&#39;/home&#39;,home);   //假如客户端会见的是/home那个途径,便用home那个模块停止处置
  9. app.use(&#39;/admin&#39;,admin);
  10. // 端心监听
  11. app.listen(3000)
复造代码
1.2 GET参数的获得

Express框架中操纵了req.query便可获得GET参数,框架内乱部会将GET参数转换为工具并返回
  1. // 引进express框架
  2. const express = require(&#39;express&#39;);
  3. // 创立网站效劳器
  4. const app = express();
  5. // 领受地点栏中问号前面的参数
  6. // 比方:http://localhost:3000/?name=zhangsan&age=30
  7. app.get(&#39;/index&#39;,(req,res) => {    //创立路由去获得get 恳求参数
  8.     res.send(req.query);     //{"name":"zhangsan","age":"30"}
  9. })
  10. // 端心监听
  11. app.listen(3000)
复造代码
150432k46ym7rg5q80qrr7.png

1.3 POST恳求参数的获得

Express中领受post恳求参数需求借助第三圆包 body-parser。(操纵号令止东西下载:npm install body-parser)
  1. // 引进express框架
  2. const express = require(&#39;express&#39;);
  3. const bodyParser = require(&#39;body-parser&#39;);
  4. // 创立网站效劳器
  5. const app = express();
  6. // 阻拦一切恳求--用app.use()    //{extended: false}参数的意义是正在办法内乱部利用体系办法querystring去处置恳求参数的格局
  7. // {extended: true}:办法内乱部利用第三圆模块qs处置恳求参数的格局
  8. app.use(bodyParser.urlencoded({extended: false}))   
  9. app.post(&#39;/add&#39;, (req,res) => {
  10.     res.send(req.body)   //该body属性为bodyParser正在req工具中增加的一个属性,属性的值便是post恳求参数
  11. })
  12. // 端心监听
  13. app.listen(3000)
复造代码
html页里:
  1. <!-- 经由过程表单由客户端背效劳器端收收post恳求 -->
  2. <!-- 表单地点为路由提交的地点 -->
  3. <form action="http://localhost:3000/add">
  4.     <input type="text" name="username">
  5.     <input type="password" name="password">
  6.     <input type="submit" name="提交">
  7. </form>
复造代码
正在表单中输进内乱容,面击“提交”按钮便可获得
150432jzg3cs0t0aos9ln0.png

1.4 Express路由参数

正在express框架中,传递战领受get恳求参数另有此外一种方法,被称做为路由参数,这类方法可让恳求地点看起去十分美妙,也能够让路由代码愈加易于浏览,开拓者一眼就能够看出去恳求当前地点需求传递哪些参数
  1. // 引进express框架
  2. const express = require(&#39;express&#39;);
  3. const bodyParser = require(&#39;body-parser&#39;);
  4. // 创立网站效劳器
  5. const app = express();
  6. // :id便是一个占位符,暗示当前路由要领受一个id做为参数
  7. // 通报多个参数则需求/index/:id/:name/:age
  8. app.get(&#39;/index/:id&#39;, (req, res) => {
  9.     // 领受post恳求参数
  10.     res.send(req.params)  //把恳求参数呼应回客户端,需求经由过程req.params去获得
  11. })
  12. // 端心监听
  13. app.listen(3000)
复造代码
留意:只要正在地点栏中传递了参数才气婚配到那个路由
150433p99h5o2lbt9bn949.png

150433ftozmbenoapuwnaa.png

传递多个参数:
150433p9kk59pzehuoqe95.png

1.5 静态资本的处理惩罚

经由过程express内乱置的express.static能够便利天托管静态文件,比方img、CSS、JavaScript文件等。
  1. app.use(express.static(&#39;public&#39;));   //public为该办法领受的参数,静态资本尽对途径
复造代码
  1. const express = require(&#39;express&#39;);
  2. const path = require(&#39;path&#39;);   //由于需求利用途径
  3. const app = express();
  4. // 完成静态资本会见功用
  5. app.use(express.static(path.join(__dirname, &#39;public&#39;)))    //起首经由过程__dirname去获得当前文件地点的尽对途径
  6. //若正在前里减上第一个参数&#39;/static&#39;,则正在例2中会见便要利用localhost:3000/static/images/1.jpg
  7. app.use(&#39;/static&#39;,express.static(path.join(__dirname, &#39;public&#39;)))
  8. app.listen(3000)
复造代码
操纵:正在public文件夹中,有甚么就能够正在地点栏中间接会见甚么
150434mzcw0d1w00m0ccp8.png

会见images文件夹上面的1.jpg:
150434uadg55u5xtucdqbg.png


2. Express页里

2.1 express-art-template模板引擎



  • 为了使art-template模板引擎可以更好的战Express框架共同,模板引擎民圆正在本art-template模板引擎的根底上启拆了express-art-template(需求装置两个模块)
  • 操纵npm install art-template express-art-template号令停止装置
    大概:npm install -S art-template npm install -S express-art-template
  • 修正app.js文件
    app.engine(‘.html’,requare(‘express-art-template’)
    app.set(‘view engine’,’html’)
  • 衬着数据到页里
    正在开拓网页的时分,网页上的内乱容常常没有是原封不动的,而是按照效劳端内乱容变更的,那便需求将数据衬着到页里上。即挪用response的render办法背页里传递数据,正在页里中操纵{{ 变量名 }}领受效劳真个数据
    例:
  1. router.get(&#39;/post&#39;,function(req,res){
  2.   res.render(&#39;post&#39;,{
  3.     title:&#39;中华高低五千年典范人物&#39;,
  4.     name:&#39;张三&#39;,
  5. age:31,
  6. happy:true
  7.   })
  8. })
复造代码
html页里:
  1. <p>
  2.         姓名:{{name}}
  3.         <br><br>
  4.         年齿:{{age}}
  5. </p
复造代码
pstrong模板案例/strong:/p
  1. const express = require(&#39;express&#39;);
  2. const path = require(&#39;path&#39;);
  3. const app = express();
  4. // 1. 报告express框架利用甚么模板引擎衬着甚么后缀的模板文件
  5. //     当衬着后缀为art的模板时  利用express-art-template
  6. app.engine(&#39;art&#39;, require(&#39;express-art-template&#39;))   //第一个参数模板后缀,第两个参数利用的模板引擎
  7. // 2. 报告express框架模板寄存的地位是甚么
  8. //     设置模板寄存目次
  9. app.set(&#39;views&#39;,path.join(__dirname, &#39;views&#39;))    //&#39;views&#39;为寄存模板的文件夹
  10. // 3. 报告express框架模板的默许后缀是甚么
  11. //     衬着模板时没有写后缀,默许拼接art后缀
  12. app.set(&#39;view engine&#39;,&#39;art&#39;);
  13. app.get(&#39;/index&#39;,(req,res) => {
  14.     // res.render协助我们拼接了模板途径、拼接了模板后缀、报告模板引擎哪个模板要战哪个数据停止拼接、把拼接的成果呼应给客户端
  15.     // 衬着模板
  16.     res.render(&#39;index&#39;, {
  17.         msg: &#39;message&#39;
  18.     })
  19. });
  20. app.get(&#39;/list&#39;,(req,res) => {
  21.     res.render(&#39;list&#39;, {
  22.         msg: &#39;list page&#39;
  23.     })
  24. })
  25. app.listen(3000);
复造代码
2.2 app.locals工具

res.render() 衬着模板的办法第两个参数是为模板供给的数据,闭于模板衬着的数据,正在差别的页里中,大众地区所要展现的数据皆是一样的
而正在app效劳器工具上面有一个local工具,能够将大众数据做为local工具上面的属性,将变量设置到app.local工具上面,那个数据正在一切的模板中皆能够获得到
  1. app.locals.user = [{
  2.         name: &#39;张三&#39;,
  3.         age: 20
  4. },{
  5.         name: &#39;李四&#39;,
  6.         age: 20
  7. }]
复造代码
总结:恳求战响应工具

恳求工具:request,客户端背效劳器收收的恳求疑息,正在效劳器端经由过程该工具去获得用户的恳求疑息


  • request.url:获得客户真个恳求地点
  • request.params:获得路由参数
    比方:
    前端客户端页里:params参数测试
    背景效劳器的接心地点:
    router.get(&#39;/test/:no/:userNo&#39;,(req,res)=>{
    res.send(req.params);//将用户的恳求参数响应归去
    })
    no领受的是12,userNo领受的是15
  • request.query:获得get恳求的查询字符串参数
    url传值:
    1. url?参数名1=参数值1&参数名2=参数2
    2. &#39;?&#39; 是url地点战参数之间的分开符
    3. &#39;&&#39; 是参数之间的分开符
    4. http://localhost:8089/login_datauserName=%E9%BB%84%E7%9B%96&password=789456331
    复造代码
  • request.body:获得以post方法恳求的恳求体内乱容
响应工具:response,效劳器经由过程该工具背客户端收收响应疑息


  • response.render(视图名,[数据]):页里的文件名(没有带扩大名),“数据”是背页里收收的数据。对视图(即网页)停止衬着,衬着完成后将视图收收给客户端
  • response.send(数据):背客户端收收响应数据,能够是一个工具 (key-value),正在收收数据的同时会给客户端衬着一个假造的页里(同步)
  • response.redirect([status,url]):重定背阅读器,默许形态码:302
  • response.json(数据):背客户端收收json格局的数据(同步)
  • response.end([数据]):将疑息响应给客户端(响应结束)以后欧断开取客户真个毗连
页里跳转的方法:


  • 恳求转收:恳求工具只要一个。正在效劳器端停止的(render停止了恳求转收)
  • 页里重定背:发作两次恳求,发生两个恳求工具。正在客户端停止的(redirect页里重定背)
总结:Express页里


  • 变动Express的默许页里引擎为art-template
    装置模块
    npm install -S art-template
    npm install -S express-art-template
    正在app.js文件中设置页里引擎
  • 衬着页里
    1. 正在效劳器端经由过程response工具的render办法将数据衬着到页里
    2. 正在页里中利用{{ 变量名 }}去获得效劳器真个数据
    复造代码
  • art-template页里引擎中页里的衬着方法:(理解便好,用于同源项目,前后端没有别离)
  1. A、前提衬着
  2.         {{ if 前提 }}
  3.                 html代码
  4.         {{ /if }}
  5. B、嵌套的前提衬着
  6.         {{ if 前提 }}
  7.                 {{ if 前提 }}
  8.                         html代码
  9.                 {{ /if }}
  10.         {{ /if }}
  11.                                   
  12. C、轮回衬着
  13.         {{ each 汇合名 as 变量}}
  14.                 html代码
  15.         {{ /each}}
复造代码
例:


  • 前提衬着:按照差别的状况展现差别的页里
  1. <h2>{{title}}</h2>
  2.    <!-- 判定年齿小于30-->
  3.    {{ if age<30 }}
  4.        <p>各人好,我是{{name}},我本年{{age}}岁,很快乐熟悉各人!</p>
  5.    {{ /if }}
  6.    <!-- 判定年齿年夜于即是30 -->
  7.    {{ if age>30 }}
  8.        <p>各人好,我是{{name}},很快乐熟悉各人!</p>
  9.    {{ /if }}
复造代码


  • 轮回衬着
  1. <h2>{{title}}</h2>
  2.    <!-- 判定年齿小于30-->
  3.    {{ if age<30 }}
  4.       <p>各人好,我是{{name}},我本年{{age}}岁,很快乐熟悉各人!</p>
  5.    {{ /if }}
  6.    <!-- 判定年齿年夜于即是30 -->
  7.    {{ if age>30 }}
  8.       <p>各人好,我是{{name}}
  9.           <!-- 判定happy字段能否为实-->
  10.           {{ if happy }}
  11.             <span>很快乐熟悉各人!</span>
  12.           {{ /if }}
  13.       </p>
  14.    {{ /if }}
复造代码
  1. router.get(&#39;/post&#39;,function(req,res){
  2.   res.render(&#39;post&#39;,{
  3.     title:&#39;当前的我&#39;,
  4.     list:[{
  5.       id:1,
  6.       content:&#39;明天气候没有错&#39;
  7.     },{
  8.       id:2,
  9.       content:&#39;今天几面睡觉的?&#39;
  10.     },{
  11.       id:3,
  12.       content:&#39;事情好乏&#39;
  13. }],
  14.   });
  15. });
复造代码


  • 轮回衬着分离前提衬着
  1. <h2>{{title}}</h2>
  2.    {{ each list as item}}
  3.       <p>id:{{item.id}},内乱容:{{item.content}}</p>
  4.    {{ /each }}
复造代码
  1. router.get(&#39;/post&#39;,function(req,res){
  2.   res.render(&#39;post&#39;,{
  3.     title:&#39;当前的我&#39;,
  4.     list:[{
  5.       id:1,
  6.       content:&#39;明天气候没有错&#39;
  7.     },{
  8.       id:2,
  9.       content:&#39;今天几面睡觉的?&#39;
  10.     },{
  11.       id:3,
  12.       content:&#39;事情好乏&#39;
  13.     }],
  14.     targetId:2
  15.   });
  16. });
复造代码
免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则