Node的web编程(二)

news2024/12/24 2:12:15

一、JSON数据

1、定义

JavaScript Object Notation,是一种轻量级的前后端数据交换的格式(数据格式)。

2、特点

(1)容易阅读和编写

(2)语言无关性

(3)便于编译、解析

3、语法要求

(1)格式:key-value:键值对

(2)每个数据项之间用','分隔

(3)用'{}'保存对象

(4)用'[]'保存数组

let obj = [
    {
        id:001,
        name:'小王'
    }
    {
        id:002,
        name:'小李'
    }
]

4、常用方法

JSON.stringify(参数):将参数里面的数据转换为JSON格式的字符串

5、使用场景

在前后端交互时,凡是需要将结构化的数据转换为文本时,都可以使用JSON格式

二、Node的http模块

1、Web服务器:网站服务器,主要用于提供网上信息浏览服务。

2、Web资源

(1)静态资源:服务器没有修改的,客户端每次请求的结果都是相同的资源称为静态资源。(CSS、image等)

(2)动态资源:经过服务器处理的资源信息。

3、HTTP协议:HyperText Transfer Protocol 超文本传输协议。规范了客户端与服务器之间进行交互的数据格式。是基于'请求'——'响应'的协议

(1)请求(request):客户端向服务端发送信息 —— http请求

(2)响应(response):服务端接收到客户端的请求后所做出的响应 ——http响应

(3)内容

  •  基本信息:Request URL:请求地址 、请求方式、请求/响应是否完成、路由地址(ip地址)
  • 响应头信息:http协议的版本号、200是状态码(表示响应已经完成)、响应文本的格式
  • 请求头信息:User-Agent(客户端浏览器的内核)、Host(请求的服务器的地址和端口号)、Accept发送请求的文本格式

(4)状态码:不同的状态码反应了请求/响应过程的完成情况

  • 200:请求-响应的过程已成功完成
  • 204:请求-响应的过程已完成,但未响应数据
  • 以3开头的状态码表示页面重定向
  • 404:客户端请求的资源不存在
  • 403:服务器拒绝请求
  • 400:请求语法错误
  • 500:服务器错误,无法响应请求
  • 503:服务器无法使用

(5)响应信息格式:采用大类型/具体类型的方式定义

  • text/plain:普通文本格式
  • text/html:html文件
  • text/css:css文件
  • application/javascript:js文件

4、node中http模块的应用:

(1)导入:require('http')

(2)创建服务器:http.createServer(function(){}),返回一个http的服务器对象

(3)启动服务器监听:listen(端口号,服务器地址,callback)

5.在服务器端获取客户端请求数据的方式:是通过请求对象request来完成的

(1)req.method:获取客户端的请求方式

(2)req.url:获取客户端的请求地址

(3)req.url.query:获取的是客户端采用get方式向服务器发送的请求数据

get方式发送的请求数据:是拼接在url地址之后的

例如:http://127.0.0.1:9000?username=小王

'?'是url和请求参数(query)之间的分隔符

'&'是参数之间的分隔符

(4)req.url.body:获取的是客户端采用post方式向服务端发送的请求数据

        post方式发送请求时:先将请求地址单独发送出去,然后将请求参数和页面的body绑定在一起发送

        处理post方式:在node的http服务器端需要使用querystring模块对客户端发送的body信息进行转换才可以得到请求参数

let info = '';
    req.on('data',(val)=>{
    	info += val;
   	})
req.on('end',()=>{
        let body_data = querystring.parse(info);
        res.setHeader('Content-Type','text/html;charset=utf8')
        res.end(`用户名:${body_data.username},密码:${body_data.userpwd}`)
})

三、ajax

1、同源和跨域

(1)同源(Origin):协议、域名、端口号相同就是同源

例:http://www.a.com:8080/test/index.html 地址同源

http://www.a.com:8080/dir/path.html ——成功 协议是http、域名为www.a.com、端口号8080

http://www.child.a.com/dir/page.html ——失败,非同源,域名不同

https://www.a.com/dir.page.html ——失败,非同源,协议不同

http://www.a.com:8090/test.index.html ——失败,非同源,端口号不同

(2)引入同源策略的原因:是浏览器的一种安全机制,即客户端的脚本(javascript程序)在没有明确授权的情况下不能访问对方的资源。

(3)不受同源策略限制的操作:

        1.页面中的链接(超链接)、页面的重定向、表单提交

 (4)跨域:只要协议、域名、端口号中有一个不同即为跨域

        跨域的解决方案:

        1.cros:服务器设置HTTP响应头中Access-Control-Origin值,解除跨域限制。限制若是在服务器端不做配置就无法跨域

        2.jsonp:利用script标签具有跨域的特征,在本地的回调函数中实现跨域

        3.反向代理:Reverse Proxy在客户端独立解决跨域问题

2、Ajax:Asynchronous JavaScript And XML,异步的JavaScript的XML支持

(1)xml:是一种前后端交互时使用的文件格式。用于可以自定义标签

(2)异步:客户端向服务器发送请求后不会等服务器的响应处理结果,继续执行自己的流程,当得到服务器的响应信息,调用客户端的回调函数,对响应信息进行处理即可

(3)异步的优点:

  • 减轻服务端的负担
  • 节省带宽
  • 用户的体验感很好

(4)Ajax技术:不是新技术、只是对html、JavaScript、xml这些技术的整合,整合后可以实现页面的局部刷新。

3、Ajax实现过程

(1)创建ajax的核心对象 —— XMLHttpRequest:使用该对象向服务器发送请求,用的是一个异步请求。可以实现页面的局部刷新。

注:W3C标准的浏览器创建XML HttpRequest对象的方法 let xhr = new XMLHTTPRequest;

非w3c标准的浏览器创建时: let xhr = new ActivexOject();

(2)XMLHttpRequest对象的属性:

        1.onreadystatechange:本质是一个事件,当请求响应的状态发生改变时触发

        2.readyState:请求响应的状态值

                0=未初始化(uninitizlized)

                1=正在加载(loading)

                2=加载完毕(loaded)

                3=交互(interactive)

                4=完成(complete)

        3.​responseText:服务器给客户端响应的字符串

        4.status:服务器响应的http状态码(200表示请求成功)

(3)XMLHttpRequest对象的方法

        1.open('method','URL'):建立和服务器之间的连接

                method:发起请求的方式    URL:服务器地址

        2.send(content):发生请求,参数通常为null

示例:通过XMLHttpRequest对象向服务器发起异步请求 

前端页面

<label for="">
    用户名:<input type="text" name="username" id="username">
   <button type="submit" id="submit_btn">提交</button>
</label>
<div id="msg" style="background-color: plum;width: 100px;height: 50px;color: #fff;text-align: center;line-height: 50px"></div>
<script>
    // 给按钮绑定click事件,当用户单击按钮时,获取input中的数据,发送给远程服务器
    document.querySelector('#submit_btn').addEventListener('click',function (){
    // 1.创建XMLHTTpRequest对象
    let xhr = new XMLHttpRequest();
    // 2.利用该对象同远程的服务器建立一个连接
    let uname = document.querySelector('#username').value;//获取input标签中的值
    xhr.open('get','http://127.0.0.1:9000?username='+uname);
    // 3.向服务端发起请求
     xhr.send(null);
    // 判断XMLHttpRequest对象的状态
    xhr.onreadystatechange = function (res){
    if(xhr.readyState === 4 && xhr.status === 200){//表示请求——响应的过程成功完成
          // 将服务器响应的信息写入到页面的div中
          document.querySelector('#msg').innerHTML = xhr.responseText;
    }
    }
 })
</script>

后端代码

const  http = require('http');
const url = require('url');
// 创建服务器
const server = http.createServer((req,res)=>{
    // 设置跨域  ’*‘表示所有的跨域
    res.setHeader('Access-Control-Allow-Origin','*');
    // 设置允许跨域访问的方式:服务器接收哪些方式的跨域访问
    res.setHeader('Access-Control-Allow-Methods','GET,PUT,POST,DELETE,OPTIONS');
    res.setHeader('Access-Control-Allow-Headers','Content-Type,request-origin');

    if(req.url !== '/favicon.ico'){
        // 采用url模块的对req.url进行解析
        let client = url.parse(req.url,true).query;
        // 设置响应信息的格式和字符集
        res.setHeader('Content-Type','text/html;charset=utf8');
        // 向客户端发送响应信息
        res.end(`<h4>欢迎${client.username}</h4>`)
    }
})
// 启动监听
server.listen(9000,'127.0.0.1',()=>{
    console.log('服务器已启动~')
});

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

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

相关文章

Mac m1配置flutter开发环境

Mac m1配置flutter开发环境 文章目录Mac m1配置flutter开发环境一、下载Android Studio二、下载flutter sdk三、新建flutter project四、使用在线环境进行Flutter开发Dart在线运行环境Flutter在线运行环境一、下载Android Studio 进入官网下载&#xff0c;选择苹果芯片版本。 …

【Spring(三)】熟练掌握Spring的使用

有关Spring的所有文章都收录于我的专栏&#xff1a;&#x1f449;Spring&#x1f448; 目录 一、前言 二、通过静态工厂获取对象 三、通过实例工厂获取对象 四、通过FactoryBean获取对象 五、Bean配置信息重用 六、Bean创建顺序 七、Bean对象的单例和多例 八、Bean的生命周期 九…

Weblogic SSRF 漏洞(CVE-2014-4210)分析

Weblogic SSRF 漏洞是一个比较经典的SSRF 漏洞案例&#xff0c;该漏洞存在于 http://127.0.0.1:7001/uddiexplorer/SearchPublicRegistries. jsp 页面中&#xff0c;如图 1-1 所示图 1-1 Weblogic SSRF 漏洞Weblogic SSRF 漏洞可以通过向服务端发送以下请求参数进行触发&#x…

ARFoundation系列讲解 - 70 HumanBodyTracking3D

---------------------------------------------- 视频教程来源于网络,侵权必删! --------------------------------------------- 一、简介 HumanBodyTracking3D(身体跟踪3D)案例,当设备检查到人体时,会返回检测到人体关节点的3D空间位置(需要在iOS 13或更高版本的A12…

瞪羚优化算法(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

Java集合类——ArrayList(扩容机制)

线性表 线性表是n个相同类型元素的有限序列&#xff0c;逻辑上连续物理上不一定是连续的&#xff0c;存储结构上分为顺序存储和链式存储&#xff0c;常见的线性表有&#xff1a;顺序表&#xff0c;链表&#xff0c;栈&#xff0c;队列…… ArrayList 数据结构 ArrayList&am…

赋值运算符重载,取地址及const取地址操作符重载

赋值运算符重载1.运算符重载2.赋值运算符重载3.取地址及const取地址操作符重载如果一个类中什么成员都没有&#xff0c;那么该类简称为空类。而空类中其实并不是真的什么都没有&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。构造函数&…

同花顺_代码解析_技术指标_V,W

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 V&R VMA VMACD VOSC VPT VR VRFS VRSI VSTD W&R WVAD V&R 波动区间 用来衡量该股的市场波动风险.即95%的概率波动区间. 行号 1 n -> 250 2 x -> 收…

【考研英语语法】状语从句精讲

一、状语从句概述 &#xff08;一&#xff09;状语从句的含义 状语从句&#xff0c;指的就是一个句子作状语&#xff0c;表达“描述性的信息”&#xff0c;补充说明另一个句子&#xff08;主句&#xff09;。描述性的信息有很多种&#xff0c;可以描述时间、地点、原因、结果…

Web大学生网页成品HTML+CSS音乐吧 7页

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 音乐网页设计 | 仿网易云音乐 | 各大音乐官网网页 | 明星音乐演唱会主题 | 爵士乐音乐 | 民族音乐 | 等网站的设计与制作 | HTML期末大学生网页设计作…

Django开发笔记

Django开发笔记Django学习1. Django安装path()函数2. 创建项目2.1 终端命令创建2.2 pycharm创建项目3. App4. 创建页面4.1 再写一个页面4.2 模板---Templates4.3 静态文件4.3.1 创建static目录4.3.2 静态文件的引用5. 模板语法案例&#xff1a;伪联通新闻中心6. 请求和响应案例…

KT148A语音芯片按键版本一对一触发播放常见的问题集锦FAQ_V4

1.1 有3个IO&#xff0c;都是一样的功能吗&#xff1f;从配置文件的说明来看&#xff0c;功能是键控发声&#xff0c;那么3个IO都只能是键控发声吗&#xff1f;还是可以有选择地某个IO对应播放那段语音&#xff1f;三个按键有什么区别&#xff1f;他们和语音号是如何对应的&…

[附源码]java毕业设计校园环境保护监督系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.7 memcached 下载与安装

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.7 memcached 下载与安装5.7.1 memcached 下载5.7.…

基于Web的个人网页响应式页面设计与实现 HTML+CSS+JavaScript(web前端网页制作课作业)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

裁员潮血洗硅谷,推特、Meta、亚麻都扛不住了!

据纽约时报14日报道&#xff0c;亚马逊计划最早于本周开启大规模裁员&#xff0c;上万名员工将被波及&#xff0c;Alexa、零售和人力部门将是重灾区。 在亚马逊员工人人自危的情况下&#xff0c;新的噩梦才刚刚开始&#xff0c;因为&#xff0c;这不过是硅谷裁员潮的冰山一角……

36、Java——一个案例学会三层架构对数据表的增删改查

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

Spring Security(1)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 虽然说互联网是一个非常开发、几乎没有边界的信息大海&#xff0c;但说起来有点奇怪的是&#xff0c;每个稍微有点规模的互联网应用都有自己的权限系统&#xff…

BSV 上的 PLONK

我们很自豪地宣布 BSV 现在支持 PLONK。关于 PLONK 工作原理的详细说明&#xff0c;可以参考我们之前的解释 第一部分 和 第二部分。 我们之前已经实现了 Groth16&#xff0c;这是最小且最高效的 SNARK 构造。但是&#xff0c;它需要为每个电路进行可信设置。通过消除对每条电…

算法工程师应该熟知的C++高级用法

1. lambda表达式&#xff08;C11&#xff09; 1.1 lambda表达式的组成 []/*1*/ ()/*2*/ mutable/*3*/ throw()/*4*/ -> int/*5*/ {}/*6*/capture子句参数列表(optional)可变规范(optional)异常定义(optional)返回类型(optional)函数体 1.2 即看即用 语法&#xff1a; […