Node.js-express

news2024/12/28 20:15:25

1.了解Ajax

1.1 什么是ajax

Ajax的全称是Asynchronous Javascript And XML(异步Js和XML).

通俗的理解:在网页中利用XMLHttpRequest对象和服务器进行数据交互的方式,就是Ajax

1.2 为什么要学习Ajax

之前所学的技术,只能把网页做的更美观漂亮,或添加一些动画效果,但是,Ajax能让我们轻松实现网页与服务器之间的数据交互。

1.3 Ajax的典型应用场景

2.JQ中的Ajax

2.1 了解JQ中的Ajax

浏览器中提供的XMLHttpRequest用法比较复杂,所以JQ对XMLHttpRequest进行了封装,提供了一系列Ajax相关的函数,极大地降低了Ajax的使用难度

JQ中发起Ajax请求最常用的三种方法如下:

A. $.get();

B. $.post()

C. $.ajax()

2.2 $.get()函数语法

JQ中$.get()函数的功能单一,专门用来发起get请求,从而将服务器上的资源请求到客户端来进行使用。$.get()函数的语法如下:

$.get(url,[data],[callback]);

其中,三个参数各自代表的含义如下:

参数名参数类型是否必选说明
urlstring要请求的资源地址
dataobject请求资源期间要携带的参数
callbackfunction请求成功时的回调函数
<body>
    <button onclick="getInfo()">请求</button>
</body>
<script>
    function getInfo() {
        $.get('http://localhost:9000/ajaxText', function (res) {
            console.log(res)
        });
    }
</script>

2.3 $.post()函数的语法

JQ中$.post()函数的功能单一,专门用来发起post请求,从而向服务器提交数据。

$.post()函数的语法如下:

$.post(‘地址’,function (res){

console.log(res);//这里的res是服务器返回的数据

})

其中,三个参数各自代表的含义如下:

参数名参数类型是否必选说明
urlstring要请求的资源地址
dataobject请求资源期间要携带的参数
callbackfunction请求成功时的回调函数

2.4 $.ajax()函数的语法

相对于$.get()和$.post()函数,JQ中提供的$.ajax()函数,是一个功能比较综合的函数,它允许我们对Ajax请求进行更详细的配置。

$.ajax()函数的基本语法如下:

$.ajax({

type:’’,//请求的方式,例如get或post

url:’’,//请求的url地址

data:{},//这次请求要携带的数据

success:function (res){}//请求成功之后的回调函数

});

<body>
    <button onclick="getInfo()">请求get</button>
    <button onclick="getInfo2()">请求post</button>
    <button onclick="getInfo3()">请求ajax</button>
</body>
<script>
    function getInfo() {
        $.get('http://localhost:1234/data', function (res) {
            console.log(res)
        });
    }
    function getInfo2() {
        $.post('http://localhost:1234/data1', function (res) {
            console.log(res);
        });
    }
    function getInfo3() {
        $.ajax({
            type: 'get',
            url: "http://localhost:1234/data",
            success: function (res) {
                console.log(res);
            }
        });
    }
</script>

3.接口

3.1 接口的概念

使用Ajax请求数据时,被请求的URL地址,就叫做数据接口(简称接口),同时,每个接口必须有请求方式。

3.2 分析接口的请求过程

3.2.1 通过get方式请求接口的过程

3.2.2 通过post方式请求接口的过程

和get方式请求的逻辑差不多

3.3 接口文档

3.3.1 什么是接口文档

接口文档,顾名思义就是接口的说明文档,它是我们调用接口的依据,好的接口文档包含了对接口URL,参数以及输出内容的说明,我们参照接口文档就能方便的知道接口的作用,以及接口如何进行调用。

3.3.2 接口文档的组成部分

接口文档可以包含很多信息,也可以按需进行精简,不过,一个合格的接口文档,应该包含以下6项内容,从而为接口的调用提供依据:

A. 接口名称:用来标识各个接口的简单说明,如登录接口,获取图书列表接口等

B. 接口URL:接口的调用地址

C. 调用方式:接口的调用方式,如get或post

D. 参数格式:接口需要传递的参数,每个参数必须包含参数名称、参数类型、是否必须、参数说明这4项内容

E. 响应格式:接口的返回值详细描述,一般包括数据名称、数据类型、说明三项内容

F. 返回示例(可选):通过对象的形式,列举

4.Ajax加强

4.1 XMLHttpRequest的基本使用

4.1.1 什么是XMLHttpRequest

XMLHttpRequest(简称xhr)是浏览器提供的JS对象,通过它,可以请求服务器上的数据资源。之前所学的JQ中的Ajax函数,就是基于xhr封装出来的。

4.1.2 使用xhr发起GET请求

步骤:

A. 创建xhr对象

B. 调用xhr.open()函数

C. 调用xhr.send()函数

D. 监听xhr.onreadystatechange事件

<body>
    <button onclick="getData()">xhr-get</button>
</body>
<script>
    //get请求
    function getData() {
        // A.创建xhr对象
        var xhr = new XMLHttpRequest();

        // B.调用xhr.open()函数
        xhr.open("get", "http://localhost:1234/data");

        // C.调用xhr.send()函数
        xhr.send();

        // D.监听xhr.onreadystatechange事件
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status == 200) {
                console.log(xhr.responseText);
            }
        }
    }
</script>
4.1.3 了解xhr对象的readyState属性

XMLHttpRequest对象的readyState属性,用来表示当前Ajax请求所处的状态。每个Ajax请求必须处于以下状态中的一个:

状态描述
0UNSENTXMLHttpRequest对象已被创建,但尚未调用open方法
1OPENEDOpen()方法已经被调用
2HEADRES_RECEIVEDSend()方法已经被调用,响应头也已经被接受
3LOADING数据接受中,此时response属性中已经包含部分数据
4DONEAjax请求完成,这意味着数传输已经彻底完成或失败
4.1.4 使用xhr发送带参数的GET请求

使用xhr对象发起带参数的GET请求时,只需在调用xhr.open期间,为URL地址指定参数即可:

xhr.open("get", "http://localhost:1234/books?id=999");

这种在URL地址后面拼接的参数,叫做查询字符串

4.1.5 查找字符串

1.什么是查找字符串

定义:查询字符串(URL参数)是指在URL的末尾加上用于向服务器发送信息的字符串(变量)。格式:将英文?放在URL的末尾,然后再加上参数=值,想加上多个参数的话,使用&符号进行分隔。以这个形式,可以将想要发送给服务器的数据添加到URL中。

1.什么是URL编码

URL地址中,只允许出现英文相关的字母、标点符号、数字,因此,在URL地址中不允许出现中文字符。如果URL中出现包含中文这样的字符,则必须对中文字符进行编码(转义).

URL编码的原则:使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符。URL编码原则的通俗理解:使用英文字符去表示非英文字符

// 不带参数
// xhr.open("get", "http://localhost:1234/data");
// 带一个参数的
// xhr.open("get", "http://localhost:1234/books?id=999");
// 带两个参数的
xhr.open("get", "http://localhost:1234/books?id=999&name=张三");

2.get请求携带参数的本质

无论使用$.ajax(),还是使用$.get(),又或者直接使用xhr对象发起GET请求,当需要携带参数的时候,本质上,都是直接将参数以查询字符串的形式,追加到URL地址的后面,发送到服务器的。

4.1.6 编码与解码

1.什么是URL编码

URL地址中,只允许出现英文相关的字母、标点符号、数字,因此,在URL地址中不允许出现中文字符。如果URL中出现包含中文这样的字符,则必须对中文字符进行编码(转义).

URL编码的原则:使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符。URL编码原则的通俗理解:使用英文字符去表示非英文字符

http://localhost:1234/books?id=999&name=张三
//经过URL编码之后,URL地址变成如下格式:
http://localhost:1234/books?id=999&name=%E5%BC%A0%E4%B8%89

2.如何对URL进行编码与解码

浏览器提供了URL编码与解码的API,分别是:

A. encodeURI()编码的函数

B. decodeURI()解码的函数

var temp = '程序员';
console.log(encodeURI(temp));//%E7%A8%8B%E5%BA%8F%E5%91%98
console.log(decodeURI('%E7%A8%8B%E5%BA%8F%E5%91%98')); //程序员

3.URL编码的注意事项

由于浏览器会自动对URL地址进行比编码操作,因此,大多数情况下,程序员不需要关心URL地址的编码与解码操作

4.1.7 使用xhr发送post请求

步骤:

A. 创建xhr对象

B. 调用xhr.open()函数

C. 设置Content-Type属性(固定写法)

D. 调用xhr.send()函数,同时指定要发送的数据

E. 监听xhr.onreadystatechange事件

// A.创建xhr对象
var xhr = new XMLHttpRequest();
// B.调用xhr.open()函数
xhr.open("post", "http://localhost:1234/data1");

// C.设置Content - Type属性(固定写法)
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

// D.调用xhr.send()函数,同时指定要发送的数据
xhr.send();

// E.监听xhr.onreadystatechange事件
xhr.onreadystatechange = function () {
	if (xhr.readyState === 4 && xhr.status == 200) {
		console.log(xhr.responseText);
	}
}

5.跨域和Jsonp

5.1 了解同源策略和跨域

5.1.1 同源策略
5.1.1.1 什么是同源

如果两个页面的协议,域名和端口都相同,则两个页面具有相同的源

例如:下表给出了相对于http://www.test.com/index.html页面的同源检测。

5.1.1.2 什么是同源策略

同源策略是浏览器提供的一个安全功能。

MDN官方给定的概念:同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。

通俗的理解:浏览器规定A网站的JS,不允许和非同源的网站C之间,进行资源的交互,例如:

A. 无法读取非同源网页的Cookie、LocalStorage和IndexedDB

B. 无法接触非同源网页的DOM

C. 无法向非同源地址发送Ajax请求

5.1.2 跨域
5.1.2.1 什么是跨域

同源指的是两个URL的协议、域名、端口一致,反之,则是跨域

出现跨域的根本原因:浏览器的同源策略不允许非同源的URL之间进行资源的交互

网页:http://www.test.com/index.html

接口:http://www.api.com/userlist

5.1.2.2 浏览器对跨域请求的拦截

5.1.2.3 如何实现跨域数据请求

现如今,实现跨域数据请求,最主要的两种解决方案,分别是JSONPCORS

JSONP:出现的早,兼容性好(兼容低版本IE),是前端程序员为了解决跨域问题,被迫想出来的一种临时解决方案。确定是只支持GET请求,不支持POST请求

CORS:出现的较晚,它是W3C标准,属于跨域Ajax请求的根本解决 方案。支持GET和POST请求。缺点是不兼容某些低版本的浏览器。

5.2 JSONP

5.2.1 什么是JSONP

JSONP是JSON的一种”使用模式”,可用于解决主流浏览器的跨域数据访问的问题。

5.2.2 jsonp实现原理

由于浏览器同源策略的限制,网页中无法通过Ajax请求非同源的接口数据。但是<script>标签不受浏览器同源策略的影响,可以通过src属性,请求非同源的JS脚本。

因此,JSONP的实现原理,就是通过<script>标签的src属性,请求跨域的数据接口,并通过函数调用的形式,接受跨域接口响应回来的数据

5.3 综合运用

npm init

npm --registry https://registry.npmmirror.com install mysql bootatrap express

api/http.js

const express = require("express");
const app = express();
const cors = require("cors");
const db = require("./02db");

// 解决跨域
app.use(cors()); // 关联express 和 cors之间的关系

/**
 * req:请求变量
 * res:响应变量
 * next:回调函数
 */
app.all("*", function (req, res, next) {
  res.setHeader("Access-Control-Allow-Origin", "*");
  next();
});

app.get("/student/selectByLoginNameAndPwd", function (req, res) {
  db.selectByLoginNameAndPwd(
    req.query.loginName,
    req.query.loginPwd,
    function (data) {
      res.json(data);
    }
  );
});

// 设置端口
app.listen(2121, function () {
  console.log("端口2121已启动,正在加载......");
});

api/db.js

const mysql = require("mysql"); // 引入第三方模块内

// 创建要连接的数据库对象
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "123456",
  database: "school2",
});

// 打开数据库连接的桥梁
connection.connect();

module.exports.selectByLoginNameAndPwd = function (name, pwd, callback) {
  let sql = `select * from student where LoginName='${name}' and LoginPwd = '${pwd}'`;
  connection.query(sql, function (err, data) {
    if (err) {
      callback(err);
    } else {
      callback(data);
    }
  });
};

html/login.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>登录</title>
    <link
      rel="stylesheet"
      href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css"
    />
    <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <style>
      html,
      body {
        height: 100%;
      }
      .container {
        height: 100%;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <h1>登录</h1>
      <div class="loginWrapper" style="width: 400px">
        <div class="username">
          <span>登录名</span>
          <input type="text" id="name" class="form-control" />
        </div>
        <div class="password">
          <span>密码</span>
          <input type="text" id="pwd" class="form-control" />
        </div>
      </div>
      <button
        class="btn btn-info"
        style="width: 200px; margin-top: 15px"
        onclick="login()"
      >
        登录
      </button>
    </div>
  </body>
  <script>
    function login() {
      $.ajax({
        url: "http://localhost:2121/student/selectLoginNameAndPwd",
        data: {
          loginName: $("#name").val(),
          loginPwd: $("#pwd").val(),
        },
        success: (res) => {
          console.log(res);
        },
      });
    }
  </script>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1420304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

想查大数据信用报告,这几点高性价比查询平台的特点要了解!内附查询平台推荐

随着大数据技术的不断发展&#xff0c;大数据信用报告成为不少人全方位了解自身个人信用的重要工具。在众多大数据信用报告查询平台中&#xff0c;选择高性价比的查询平台是很多人都想了解的&#xff0c;本文就为大家介绍大数据信用报告查询高性价比平台的特点&#xff0c;希望…

如何在群晖NAS部署office服务实现多人远程协同办公编辑文档

文章目录 本教程解决的问题是&#xff1a;1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 本教程解决的问题是&#xff1a; 1.Word&#xff0c;PPT&#xff0c;Excel等重要文件存在本地环境&#xff0c;如何在编…

阿里云幻兽帕鲁服务器4核16G配置报价

自建幻兽帕鲁服务器租用价格表&#xff0c;2024阿里云推出专属幻兽帕鲁Palworld游戏优惠服务器&#xff0c;配置分为4核16G和4核32G服务器&#xff0c;4核16G配置32.25元/1个月、10M带宽66.30元/1个月、4核32G配置113.24元/1个月&#xff0c;4核32G配置3个月339.72元。ECS云服务…

RabbitMQ之三种队列之间的区别及如何选型

目录 不同队列之间的区别 Classic经典队列 Quorum仲裁队列 Stream流式队列 如何使用不同类型的队列​ Quorum队列 Stream队列 不同队列之间的区别 Classic经典队列 这是RabbitMQ最为经典的队列类型。在单机环境中&#xff0c;拥有比较高的消息可靠性。 经典队列可以选…

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法

文章目录 前言参考目录学习笔记1&#xff1a;动态连通性2&#xff1a;UF 实现 1&#xff1a;快速查找 quick-find2.1&#xff1a;demo 演示 12.2&#xff1a;demo 演示 22.3&#xff1a;quick-find 代码实现3&#xff1a;UF 实现 2&#xff1a;快速合并 quick-union3.1&#xf…

Powershell 并发任务 | Runspace 线程 | 结果获取

介绍 在 PowerShell 中进行多任务处理&#xff08;Multithreading 或 Parallel Processing&#xff09;主要目的是提高脚本的执行效率和性能。对于需要处理大量数据或执行多个独立任务的脚本来说尤其有用。 提高性能&#xff1a; 多任务处理允许脚本同时执行多个任务&#xff…

Centos7 双机单网卡安装 OpenStack

虚拟机配置 1&#xff1a;准备虚拟机2台&#xff0c;配置如下 openstack master----192.168.20.205 2cpu&#xff0c;8G内存&#xff0c;200G硬盘&#xff0c;网络桥接方式--静态IP----单网卡 node1计算节点---192.168.20.215 2cpu&#xff0c;8G内存&#xff0c;200G硬盘&a…

数据结构【初阶】--排序(归并排序和基数排序)

目录 一.归并排序的非递归写法 1.思想应用 2.代码基本实现 (1)单趟归并逻辑 (2)多趟&#xff08;循环&#xff09;的控制条件 ① 迭代条件&#xff1a;i2*gap ② 结束条件&#xff1a;i(或i<n-2*gap)<> (3)代码展示 ① 单趟逻辑 ②整体逻辑 3.优化代码…

《HTML 简易速速上手小册》第6章:HTML 语义与结构(2024 最新版)

文章目录 6.1 语义化标签的重要性6.1.1 基础知识6.1.2 案例 1&#xff1a;使用 <article>, <section>, <aside>, <header>, 和 <footer>6.1.3 案例 2&#xff1a;构建带有嵌套语义化标签的新闻网站6.1.4 案例 3&#xff1a;创建一个带有 <mai…

HAL库之看门狗

一、看门狗的介绍 &#xff08;1&#xff09;独立看门狗(IWDG)&#xff1a;独立看门狗由专用的低速时钟(LSI)驱动&#xff0c;即使主时钟发生故障它也仍然有效。因此叫独立&#xff0c;同时因此在低功耗模式下不能启动看门狗&#xff0c;低功耗详情见之前文章。IWDG比WWDG更精…

macos Android平台签名证书(.keystore)

一、申请appid的使用说明&#xff08;有appid的请忽略申请appid&#xff09; 创建应用 申请的appid在源码视图填写后会自动生成一个对应的包名 ⚠️注意&#xff1a;申请appid的时候应用名称和项目名称保持一致。 二、 Android如何使用自用证书进行打包 1.找到安装jdk的路径…

D25XB100-ASEMI整流桥D25XB100参数、封装、规格

编辑&#xff1a;ll D25XB100-ASEMI整流桥D25XB100参数、封装、规格 型号&#xff1a;D25XB100 品牌&#xff1a;ASEMI 正向电流&#xff08;Id&#xff09;&#xff1a;25A 反向耐压&#xff08;VRRM&#xff09;&#xff1a;1000V 正向浪涌电流&#xff1a;350A 正向…

win10设置重启自动运行

大家知道windows系列非常不稳定&#xff0c;经常更新&#xff0c;蓝屏&#xff0c;死机等。 所以服务部署在上面会经常挂掉。当他重启后&#xff0c;对应的服务要是没有开启成功就会出问题。 所以我们需要在重启后启动。 1.首先把你想要的执行的程序写一个bat脚本 这个是我的…

C语言第十三弹---VS使用调试技巧

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 VS调试技巧 1、什么是bug 2、什么是调试&#xff08;debug&#xff09;&#xff1f; 3、Debug和Release​编辑​ 4、VS调试快捷键 4.1、环境准备 4.2、调试…

学习Spring的第十二天

Bean基本注解开发 创建一个空Maven项目: 创建完如下 之后在pom文件配置坐标 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.7</version></depe…

翻译: GPT-4 Vision征服LLM幻觉hallucinations 升级Streamlit六

GPT-4 Vision 系列: 翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式一翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式二翻译: GPT-4 Vision静态图表转换为动态数据可视化 升级Streamlit 三翻译: GPT-4 Vision从图像转换为完全可编辑的表格 升级St…

Windows系统安装OpenSSH+VS Code结合内网穿透实现远程开发

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

Netty-ChannelHandle的业务处理

ChannelHandle结构 ChannelHandler基础接口 基础接口里面定义的基础通用方法。增加handler&#xff0c;移除handler&#xff0c;异常处理。 ChannelInboundHandler public interface ChannelInboundHandler extends ChannelHandler {/*** The {link Channel} of the {link Ch…

学习PyQt5

1、布局之后&#xff0c;无法移动对象到指定区域&#xff0c;无法改变对象大小。 原因&#xff1a;因为CtrlA选中了整个窗口&#xff0c;然后布局的时候就相当于整个窗口都按照这种布局&#xff0c;如选了水平布局&#xff0c;按钮一直在中间&#xff0c;无法拖到其它位置。 …

如何安装配置HFS并实现无公网ip远程访问本地电脑共享文件

文章目录 前言1.下载安装cpolar1.1 设置HFS访客1.2 虚拟文件系统 2. 使用cpolar建立一条内网穿透数据隧道2.1 保留隧道2.2 隧道名称2.3 成功使用cpolar创建二级子域名访问本地hfs 总结 前言 在大厂的云存储产品热度下降后&#xff0c;私人的NAS热度快速上升&#xff0c;其中最…