服务器是个媒婆,做好事不留名?!

 刚开始觉得服务器才是大boss,掌管着各种数据的“生死大权”,但现在不这么觉得了,倒觉得它像个“媒婆”,哈哈哈,这位“媒婆”到底牵了谁与谁的线?探究一下这位“小媒婆”。

【1.0前情了解】

我们浏览网页时,想从网页上获取的信息就是向服务器发请求,服务器再从数据库中查找到结果反馈给我们,实质上就是:对存在数据库中的数据进行的增、删、改、查

增:【如:网页中出现的一些注册页面】---通过post方式,提交表单信息到服务器,通过服务器与数据库的连接,使用sql语句的添加语句,将数据添加到数据库,保存起来

删:【如:删除个人用户的一些数据】---通过get方式,向服务器发送请求,服务器与数据库连接,根据数据唯一标识使用sql语句的删除语句,将数据库中数据删除,再将删除成功信息返回

改:【如:对个人信息表的修改】---分两步进行,

第一步:通过get方式,向服务器发送请求,服务器与数据库连接,执行sql查询语句,根据唯一标识获得要修改的页面的信息,并把服务器从数据库中查到的数据显示到页面上

第二步:再次通过post方式,向服务器发送提交数据的请求,与  的过程相似,通过服务器与数据库的连接执行sql更新语句,将更改的信息在数据库更新

查:【如:获取网页的整页信息】---通过get方式,向服务器发送请求,服务器与数据库建立连接,根据数据的唯一标识,执行sql语句的查询语句,从数据库中查询到我们需要的数据,并将查询的结果返回给服务器,服务器在返回给浏览器,最后显示给我们

【2.0揭示庐山真面目】:“媒婆的工作原理”

【准备工作】加载第三方模块(所有):    npm  i   express   mysql   multer   body-parser

【配置服务器】完成app.js   /   db.js(数据库)文件

app.js文件:

编写有点乱,可以优化一下,如下:

db.js文件:

【正式工作流程】

“媒婆”(服务器)连接着浏览器和数据库,从浏览器发送请求开始,浏览器向服务器发送请求的方式有两种:GET或者POST,“媒婆”(服务器)也会对应“招待”这两种请求,是GET请求,就用GET方式招待,POST请求,就用POST方式招待。

【2.1GET方式】

浏览器发送GET方式请求:

在html页面使用jq发get请求,用于获取页面信息

$.get('请求url/接口地址',{ },function(res) {

        //代码体,可能会使用模板引擎

},'json')

第1个参数:后台编写的接口地址或要请求的地址

第2个参数:请求时传递的参数,无参数可以不写,也可以直接写在第一个参数后面

第3个参数:一个回调函数,里面是从服务器响应返回的结果,有时可以配合模板引擎将数据显示在页面中,有时也可以直接使用res这个结果,将数据直接呈现在页面上

第4个参数:是返回数据的显示格式,是个json格式的数据,易于阅读

服务器接收GET方式请求,并且处理请求后作出响应:

在app.js中使用express接受get请求:浏览器发起get请求,服务器就要接受get请求

app.get('接口名', (req, res) => {

        //req:包含浏览器所有的请求信息

        //res:保存着服务器响应给浏览器的所有信息

     

       //sql:为查询语句,let sql = '语句 ?';

       //values:为sql中占位符?的确切的值

      db(sql, values,  (err, data) =>{ //调用db函数

              if(err) {

                 throw err;

                 res.send({code:201});

              }  else {

                 res.send(data);//将查询到的数据返回给浏览器

                  //或不需要返回的数据,只需一个提示时写:

                 res.send('响应成功的信息提示')

              }

       });

})

【2.1POST方式】

浏览器发送POST方式请求:

表单有文件上传提交(注册信息或修改信息提交时)浏览器发起post方式的请求

步骤:

(1)收集表单信息,使用FormData收集后保存到fd,

(2)单独处理上传文件时的图片预览(使用临时url)

(3)在html页面使用jq发起ajax(post)请求

$.ajax({

        contentType: false,

        processData: false,

        type: ’post‘,

        url: '要请求的url或接口地址',

        data: {},//请求时传的参数,即收集的表单数据的name值

        dataType: 'json',

        error: function() {

             //可以捕获异常或错误信息

         },

        success: function(res) {

            //请求成功后,实现页面跳转

        }

})

服务器接收POST方式请求,处理请求后作出响应:

在app.js使用multer处理有上传文件的post请求:浏览器发起post请求,服务器就要接受post请求

app.post('接口名', upload.single('表单上传文件控件的name值'),function(req, res) {

       //req:包含浏览器所有的请求信息

        //res:保存着服务器响应给浏览器的所有信息

     

      //sql:为查询语句    //values:为sql中占位符?的确切的值

       let sql = '语句 ?';

       let values = {

            //数据库字段名:服务器接受的表单的各项name名

                  name : req.body.heroName;  

                      file : req.file.path

        }

       db(sql, values,  (err, data) =>{ //调用db函数

              if(err) {

                 throw err;

                 res.send({code:201});

               }  else {

                 res.send(data);//将查询到的数据返回给浏览器

                  //或不需要返回的数据,只需一个提示时写:

                 res.send('响应成功的信息提示')

              }

       });

})

【2.3与数据库联系】

不管浏览器发送get请求,服务器对应接收get请求,还是浏览器发送post请求,服务器接收post请求,都要与数据库产生联系,都要经服务器执行sql语句,到数据库中查询数据,并返回查询的结果。

sql语句查询数据:

增:insert into  表名  set  字段名=’值‘

删:delete from 表名  where  id = ?

改:update 表名  set  字段名=’值‘  where  id =?

查:select *  from  where 要查询的条件

注意:删和改都要加条件,且是数据的唯一标识,不写条件会全部删除或全部修改!!!

三者关系大致如图

【3.0小知识点】

【1】服务器接收请求时的参数

为什么?因为在做修改页面时,

第一步是根据请求地址的id(唯一标识)获取页面信息,此时用到接收get请求的参数,

作用:根据这个id,去数据库中查询数据详情;

第二步是在做了修改信息之后,点击按钮修改,依旧用的是multer模块处理上传文件的post请求,此时用到接收post请求时的参数,

作用:将收集到的信息(即表单的name值)和数据库中的字段名对应

接收get请求时的参数:使用req.query接收,是个对象

接收post请求时的参数:使用req.body接收参数(接收的是表单文本的参数,如,text/email/textarea),是个对象

接收post请求时的参数:使用req.file接收参数(接收的是表单上传文件的参数),是个对象

【2】收集表单数据,并用post提交

方法一:要求使用FormData方式收集表单信息,有上传文件(注意收集的数据是个dom对象)

var  fd = new FormData($('form')[0]);

将fd作为post请求时传的参数即可

方法二:未要求用FormData收集数据(如登录页面仅需收集表单信息即可,无文件上传)

使用jq提供方法:var data = $(form').serialize;

将data作为post请求时传的参数即可

【3】文件上传及预览效果

找到文件jq对象,当上传文件发生改变时,发生change事件:

获取到当前文件对象(dom对象):

var objFile =  this.files[0];

将当前文件对象保存到一个临时url中: 

var url = URL.createObjectURL(objFile);

改变src的属性:$('选择器').attr('src',  url);

【4】获取自定义属性方法

方法一:如在事件委托中,获取自定义的属性data-id的值

var   id = $(this).attr('data-id');

方法二:使用h5新增属性:dataset收集所有自定义属性

var id = this.dataset.id;

【5】几个id值

(1) 编辑按钮连接跳转处设id值:

编辑按钮连接跳转处设id,是要保存数据的唯一标识,保证跳转时,会跳转到对应的唯一页面

(2) 删除按钮处设自定义属性id(data-id):

data-id里面保存着此条数据的唯一标识,在执行删除操作时,可以删除对应的唯一数据

(3) 编辑页面表单域中设一个隐藏的表单控件,在表单控件中设id:

<input type="hidden" name="id" />

这里的id是name的属性值(name='id'),修改操作时接口要求传一个id参数,

收集表单数据时会将这个name的值(即id)作为参数传到对应的要修改的数据上,有时也会在隐藏域设一个value值,里面保存数据的id。

【以上均是自己整理,也可能不太全,如喜欢,请关注哦,不定时分享生活见闻及总结所习得的技术,哈哈~】

微信扫一扫
关注该公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值