前端框架-小程序uniApp

在这里插入图片描述

uni全栈开发

同步本地存储接口

uni.Storage 模块

setStorageSync

将数据以键值对(key-value)的形式同步存储到本地。
适用于需要立即确保数据持久化的场景。

核心特性:
同步执行:直接阻塞代码执行,直到存储操作完成(与异步的 uni.setStorage 相对)。
简单键值对:仅支持存储字符串、数字、布尔值等简单数据类型。
跨平台支持:在 H5、小程序、App 等多端均可使用。

注意事项:
存储空间限制:
小程序:通常限制为几MB(具体依平台而定)。
H5:依赖浏览器 localStorage,通常为 5MB。
App:无明确限制,但建议合理控制。
安全性:
避免存储敏感信息(如密码、令牌),因本地存储可能被恶意读取。
性能:
同步方法会阻塞线程,频繁调用可能影响性能。
对性能敏感场景建议使用异步方法 uni.setStorage。
对比异步方法:
方法 执行方式 返回值 适用场景
uni.setStorageSync 同步 无 需要立即确保数据持久化
uni.setStorage 异步 Promise 非关键数据存储

扩展场景:
读取数据:使用 uni.getStorageSync(key)。
删除数据:使用 uni.removeStorageSync(key)。
清空所有:使用 uni.clearStorageSync()。
如果需要存储复杂对象,建议先通过 JSON.stringify() 转换为字符串,读取时再用 JSON.parse() 解析。

条件编译跨端兼容

#ifdef
#ifndef

<!-- 微信小程序, QQ小程序, app, h5使用wxs -->
<!-- #ifdef MP-WEIXIN || MP-QQ || APP-PLUS || H5 -->
		 
<!-- #endif -->

// #ifdef H5
BASE_URL = '/dpc';    //H5下将地址修改为/dpc
// #endif

VUE3
APP-PLUSApp端,包括iOS和AndroidH5:网页端,即在浏览器中运行的H5应用。
MP-WEIXIN:微信小程序端。
MP-ALIPAY:支付宝小程序端。
MP-BAIDU:百度小程序端。
MP-TOUTIAO:字节跳动(今日头条)小程序端。
MP-QQQQ小程序端。

原生渲染能力 APP-NVUE

内置了一个基于weex改进的原生渲染引擎,提供了原生渲染能力
它与vue在用法上稍有不同,如果不是使用uniapp开发app的话,就不要使用nvue,

uniCloud uni-id uni-admin

https://www.bilibili.com/video/BV1yG4y1h7ck?spm_id_from=333.788.videopod.episodes&vd_source=f21773b7086456ae21a58a6cc59023be

事件触发机制

在组件之间传递消息或事件

uni.$emit

全局事件总线(Event Bus)机制
用于实现非父子组件之间的通信

全局的自定义事件

云数据库

一键登录

unicloud文档

https://doc.dcloud.net.cn/uniCloud/cf-database.html#get-collection
https://doc.dcloud.net.cn/uniCloud/cloud-obj.html

uniCloud web控制台
unicloud登录


uniCloud服务空间-阿里云版-包年包月

云函数:资源使用量:1000GB
调用次数:1.5万次 
出网流量:1GB


容量:2GB
读操作数:0.05RU/天写操作数:0.03WU/天
容量:5GB下载操作次数:0.2万次上传操作次数:0.1万次CDN流量:1GB
容量:5GB

CDN流量:1GB
 
1个月

uniCloud

快速开发插件市场
更新日志

自定义H5模板

创建和使用自定义H5模板,以满足调整meta信息、SEO配置和引入第三方JS的需求。通过在根目录创建template.h5.html文件

分包

在这里插入图片描述

easycom

Uniapp框架提供的一种组件自动注册机制,它可以自动扫描指定目录下的所有组件,并注册到全局组件中。这意味着我们无需手动在components中引入组件,也无需在每个页面中单独引入组件,只需要在组件的目录下创建一个index.vue文件,就可以自动注册组件并在全局中使用了。

uniIdRouter

前端页面访问权限路由控制
自动处理页面访问权限,确保某些页面需要登录才能访问。

底层使用navigateTo、redirectTo、reLaunch、switchTab的拦截器进行页面跳转拦截,不会拦截进入首页,web端和app端会拦截原生tabbar点击,其他端不会拦截原生tabbar点击。

Uni-id

在这里插入图片描述

Invalid uni-id config file
在这里插入图片描述

{
   
  "passwordSecret": [
    {
   
      "type": "hmac-sha256",
      "version": 1
    }
  ], 
  
  "passwordStrength": "medium", 
  
  "tokenSecret": "", 
  
  "requestAuthSecret": "", 
  
  "tokenExpiresIn": 7200, 
  
  "tokenExpiresThreshold": 3600, 
  
  "maxTokenLength": 10, 
  
  "passwordErrorLimit": 6, 
  
  "passwordErrorRetryTime": 3600, 
  
  "autoSetInviteCode": false, 
  
  "forceInviteCode": false, 
  
  "idCardCertifyLimit": 1, 
  
  "realNameCertifyLimit": 5, 
  
  "sensitiveInfoEncryptSecret": "", 
  
  "frvNeedAlivePhoto": false, 
  
  "userRegisterDefaultRole": [], 
  
  "app": {
    
	  
    "tokenExpiresIn": 2592000,
    "tokenExpiresThreshold": 864000,
    "oauth": {
   
     
	 
      "weixin": {
   
        "appid": "",
        "appsecret": ""
      },
   
   
      "qq": {
   
        "appid": "",
        "appsecret": ""
      },
      "apple": {
    
		  
        "bundleId": ""
      },
      "huawei": {
    
		  
        "clientId": "",
        "clientSecret": ""
      }
    }
  },
  "web": {
    
	  
    "tokenExpiresIn": 7200,
    "tokenExpiresThreshold": 3600,
    "oauth": {
   
      "weixin-h5": {
    
		  
        "appid": "",
        "appsecret": ""
      },
      "weixin-web": {
    
		  
        "appid": "",
        "appsecret": ""
      }
    }
  },
  "mp-weixin": {
   
    "tokenExpiresIn": 259200,
    "tokenExpiresThreshold": 86400,
    "oauth": {
   
      
	  
      "weixin": {
   
        "appid": "",
        "appsecret": ""
      }
    }
  },
  "mp-qq": {
   
    "tokenExpiresIn": 259200,
    "tokenExpiresThreshold": 86400,
    "oauth": {
   
      
	  
      "qq": {
   
        "appid": "",
        "appsecret": ""
      }
    }
  },
  "mp-alipay": {
   
    "tokenExpiresIn": 259200,
    "tokenExpiresThreshold": 86400,
    "oauth": {
   
    
	
      "alipay": {
   
        "appid": "",
        "privateKey": "", 
		
        "keyType": "PKCS8" 
		
      }
    },
    "mp-harmony": {
   
        "huawei": {
    
			
          "clientId": "",
          "clientSecret": ""
        }
    }
  },
  "service": {
   
    "sms": {
   
      "name": "",
	  
      "codeExpiresIn": 180, 
	  
      "scene": {
   
        "bind-mobile-by-sms": {
    
			
          "templateId": "", 
		  
          "codeExpiresIn": 240 
		  
        }
      }
    },
    "univerify": {
   
      "appid": "" 
	  
    }
  }
}

服务空间

项目关联空间

云函数 cloudfunctions

传统操作数据库
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

云对象importObject

uniCloud.importObject
引用云对象

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述

JSON 格式的文档型数据库

nosql 非关系型数据库

关系型			JSON 文档型
数据库 			database	数据库 database
表 table		集合 collection。但行业里也经常称之为“表”。无需特意区分
行 row			记录 record / doc
字段 column / field	   字段 field
使用sql语法操作	使用MongoDB语法或jql语法操作 

一个uniCloud服务空间,有且只有一个数据库;

一个数据库可以有多个表;
一个表可以有多个记录;
data:数据内容
index:索引
schema:数据表格式定义


一个记录可以有多个字段。

Collection unicloud数据的指定表集合

获取集合Collection示例如下

'use strict'
const db=unicloud.database();
exports.main=async (event,context)=> 
	let {num}= event;
	return await db.collection("article" ).limit(num).get();  
} 


集合 Collection
通过 db.collection(name) 可以获取指定集合的引用,在集合上可以进行以下操作

类型	接口	说明
写	add	新增记录(触发请求)
计数	count	获取符合条件的记录条数
读	get	获取集合中的记录,如果有使用 where 语句定义查询条件,则会返回匹配结果集 (触发请求)
引用	doc	获取对该集合中指定 id 的记录的引用
查询条件	where	通过指定条件筛选出匹配的记录,可搭配查询指令(eq, gt, in, …)使用
-	skip	跳过指定数量的文档,常用于分页,传入 offset
-	orderBy	排序方式
-	limit	返回的结果集(文档数量)的限制,有默认值和上限值
-	field	指定需要返回的字段 

getData(){
	unicloud.callFunction({
  name:"cloudFun1"}).then(res=>{
		console.log(res);
})

DB Schema 结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

OpenDB 预制表单

JQL 语法

在这里插入图片描述在这里插入图片描述

requireNativePlugin

https://uniapp.dcloud.net.cn/plugin/native-plugin.html#requirenativeplugin

uni.promisify.adaptor.js

用于将小程序原生 API 的回调风格转换为 Promise 风格。
微信小程序的原生API通常采用异步回调的方式来处理请求结果,而Promise是JavaScript中用于处理异步操作的一种更优雅和易于链式调用的方式。
这个文件提供了适配器函数,使得开发者能够以Promise的形式来调用微信小程序的API

subPackages

封装$myRequest方法并挂载到全局

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

抓包

https://mp.weixin.qq.com/s/00tbT1ENFLdhIWElreFxtg
浅谈微信小程序渗透





# 踩坑 | Fiddler雷电模拟器4.0无法抓包(超详细)
https://mp.weixin.qq.com/s/AYVRGWbOCWvQh6fyifqcQQ


反编译&调试小程序请求签名

https://mp.weixin.qq.com/s/KfhgP97alL_d8mmOY4z44w

使用安卓模拟器挂微信找小程序包脱出来解包的操作太繁琐

MAC PC端微信
使用现有工具(https://github.com/TinyNiko/mac_wxapkg_decrypt) 采用github提到的第一种解密方法

首先需要安装frida

更新pip
python3 -m pip install --upgrade pip

安装frida
pip3 install frida

安装frida-tools
pip3 install frida-tools






Windows PC端微信
也是已经有师傅写好解密小程序包的工具了(https://github.com/BlackTrace/pc_wxapkg_decrypt) 找到微信小程序包所在根路径


夜神模拟器


C:\Users\amingMM\Nox_share\ImageShare

低版本 
Android 5  324CPU 6G

wxappUnpacker

反编译

微信小程序开发者,对前端思路的学习。


《解密》与《逆向》

在/data/data/com.tencent.mm/MicroMsg/xxxxxxx(不同微信文件夹也不同)/appbrand/pkg/目录下
存放着刚才访问这个小程序的两个数据包,


“我-设置-切换账号”,点击“添加账号”,
会弹出“登录其他账号”和“注册一个新的账号”选项。进入“注册一个新的账号”,
选择“通过当前微信号辅助注册”,就可以开始安全验证了。

在这里插入图片描述

两个包分为子包和主包 
压缩后通过模拟器的微信发送到物理机进行反编译

wxappUnpacker进行反编译
CMD进入wxappUnpacker的下载目录,安装依赖包

```
npm install esprima

npm install css-tree

npm install cssbeautify

npm install vm2

npm install uglify-es

npm install js-beautify
 

转发 onShareAppMessage

用户点击右上角转发

页面组件

通过 module.exports 将一个对象导出

前端-制作自己的iconfont


色号转换
https://www.bchrt.com/tools/color-convert/

 https://www.iconfont.cn/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Vue的原型链

 App.vue 中使用
Vue.prototype.$location
// 在 Vue 组件中访问全局变量
console.log(this.$location)

生命周期函数onLoad

页面加载时被调用

<script>
 

	export default {
   
		
		data(){
   
		 
		},
		components: {
     
		},

		/**
		 * 生命周期函数--监听页面加载
		 */
		onLoad() {
   
			 
		},

		/**
		 * 生命周期函数--监听页面显示
		 */
		onShow() {
   

		}	,
		
		methods:{
    
		
		}





	}
</script>

uni.chooseLocation

getCurrentPages

getCurrentPages() 方法获取到当前页面栈的所有页面,

而 pages[pages.length - 2] 表示当前页面栈中的倒数第二个页面,也就是其上一个页面的页面对象。
通过这个方法,我们可以在当前页面中调用上一个页面的方法、获取其数据等操作。

美团外卖微信小程序开发

调用https接口
开发小程序
提高vue技术
前端技术
课程需要具备vue基础知识

uniapp-美团外卖微信小程序开发

P1 成果展示

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
nodejs 后台
在这里插入图片描述

P2外卖小程序后端,学习给小程序写http接口

在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

P3 主界面配置

uniapp 小程序 vue
在这里插入图片描述在这里插入图片描述
新建界面
添加配置
在这里插入图片描述
资源文件
在这里插入图片描述
底部导航栏在这里插入图片描述

拾色器
在这里插入图片描述

P4 首页组件拆分

P13 外卖列表布局

筛选组件

在这里插入图片描述在这里插入图片描述

  • 发生事件穿透
    在这里插入图片描述
    在这里插入图片描述

商家 布局

在这里插入图片描述

  • 引进子组件
	import Take from './components/takeout.vue'
	 
	export default {
		components:{
			Take
		},

在这里插入图片描述

<template>
  <view>
	<block v-for="(item,index) in  shoperlist"  :key="index">
		<view class="content-view">
			<view class="content_img">
				<image :src="item.logo" mode="aspectFill"></image>
			</view>
			
			<view class="content_title">
				<text class="content_shoper">{
  {item.shoper}}</text>
				<view class="content_result">
					<text>月销售{
  {1}}</text>
					<text>距您约{
  {item.duration}}分钟</text>
				</view>
				<view class="content_end"> 
					<image src=""></image>
					<text>{
  {item.types}}</text>
				</view>
			</view>
		</view>
	
	</block>
  </view>
</template>

测试数据

  • 写死数据 数组对象
    https://www.bilibili.com/video/BV1Zt4y117RR?p=13&vd_source=f21773b7086456ae21a58a6cc59023be
<script>
	export default {
		data() {
			return {
				shoperlist: [{
						'logo': 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fqny.smzdm.com%2F202205%2F23%2F628b811626a976429.jpg_d250.jpg&refer=http%3A%2F%2Fqny.smzdm.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1668590466&t=06731bdad94505329d8a942c1e08e66b',
						'shoper': '啦啦啦',
						'duration': 30,
						'types': '大傻逼'
					} ]
			}
		},
  

	}
</script>

创建样式


.content-view text{display: block;}
.content-view{display: flex;
justify-content: space-between;
height: 200upx !important;
overflow: hidden;
border-bottom: 1rpx solid #E4E8EB;
padding-bottom: 5upx;
margin: 30upx 0;
color: #898989;}

.content_img{
	width: 350upx !important;
	height: 200upx !important;
}


.content_img image{
	width: 100%;
	height: 100%;
	border-radius: 10upx;
}

.content_title{
	width: 100%;
	padding-left: 10upx;
	font-size: 24upx;
}

.content_shoper{
	color: #333333;
	height: 50upx;
	font-size: 33upx;
	font-weight: bold;
	line-height: 50upx;
	display: -webkit-box;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 1;
	overflow: hidden;
}

.content_result{
	display: flex;
	justify-content: space-between;
	height: 50upx;
	line-height: 50upx;
}

.content_end{
	display: flex;
	align-items: center;
	height: 50upx;
	line-height: 50upx;
}

.content_end text {width: 130upx;}
.content_end image {width: 24upx; height: 24upx;
padding-right: 10upx;}

<style scoped>
	@import '../../../common/css/take.css'
</style>

在这里插入图片描述

请求商家外卖数据

在这里插入图片描述

封装请求

在这里插入图片描述在这里插入图片描述

父页面引入

Prop属性传递:

在父组件中通过给子组件的 prop 属性绑定一个值,来传递参数。


<template>
  <child-component :msg="message"></child-component>
</template>
  
  <template>
  <div>{
   {
    msg }}</div>
</template>

<script>
  export default {
   
    props: {
   
      msg: {
   
        type: String,
        default: ''
      }
    }
  }
</script>

Slot分发传递:

通过父组件在自身的插槽中填充内容,子组件通过插槽将父组件的内容显示出来。

<template>
  <child-component>
    <p>{
   {
    message }}</p>
  </child-component>
</template>
 
<template>
  <div>
    <slot></slot>
  </div>
</template>

并发请求

同时并发请求 多个接口,同时得到 多个接口数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
object 对象

在这里插入图片描述

工作 android jsbridge H5(uniapp打包) Hyprid App解决跨域问题

开发中
  • 如果 你用 Hbuilder 自带的 内置 浏览器 (自带 解决了 跨域问题 )

可以 正常 调试 、、、

  • 但是 无法 从 android 那边 安卓webview 打开 调试
    所以 还是 得 加 跨域 代理
常识性 跨域 原理 知识点

(需要软件开发 联系我哦)

 一、为什么会出现跨域问题
出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,
它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。

可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。
所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

  什么是跨域
当一个  浏览器  请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域

当前页面url	被请求页面url	是否跨域	原因
http://www.test.com/	http://www.test.com/index.html	否	同源(协议、域名、端口号相同)
http://www.test.com/	https://www.test.com/index.html	跨域	协议不同(http/https)
http://www.test.com/	http://www.baidu.com/	跨域	主域名不同(test/baidu)
http://www.test.com/	http://blog.test.com/	跨域	子域名不同(www/blog)
http://www.test.com:8080/	http://www.test.com:7001/	跨域	端口号不同(8080/7001) 
官方定义:
OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。
通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。

出于安全考虑,并不是所有域名都可以访问后端服务。
在正式跨域之前,浏览器会根据需要发起一次预检(也就是 OPTIONS 请求),
用来让服务端返回允许的方法(如get、post),
允许被跨域访问的Origin(来源或者域),还有是否需要Credentials(认证信息)等。

浏览器将 CORS 分为两类
简单请求 不会进行预检,对于简单请求,浏览器直接请求,会在请求头信息中,增加一个origin字段,
来说明本次请求来自哪个源(协议+域名+端口)
同时满足下列三大条件,就属于简单请求,否则属于非简单请求

1.请求方式只能是:GET、POST、HEAD
2.HTTP请求头限制这几种字段:
Accept、Accept-Language、Content-Language、Content-Type、Last-Event-ID
3.Content-type取:application/x-www-form-urlencoded、multipart/form-data、text/plain 
  • 所以 说一下 解决方案

第一种:在项目根目录下(即跟App.vue同级)建vue.config.js,这个文件会默认优先加载
在这里插入图片描述

这个 是 测试 时候 用的 仅供参考

格式

module.exports = {
   
	devServer:{
   
		port:'8080',
		disableHostCheck:true,
		proxy:{
   
			'/dpc':{
   
				target:'http://XXXXX:9088',
				changeOrigin:true,
				pathRewrite:{
   
					'^/dpc': ''
				}
			}
		}
	}
}

第二种:在manifest.json的代码视图中 根节点中(即{}中),做如下声明

 "h5": {
   
	"devServer": {
   
		"port": 8080,	//浏览器运行端口
		"disableHostCheck": true,
		"proxy": {
   
			"/dpc": {
   
				"target": "XXXXXX:9088",		//实际请求服务器地址
				"changeOrigin": true,
				"secure": true,
				"pathRewrite": {
   
					"^/dpc": ""
								}
					}
				}
			}
		}
  • 封装的 请求 示例
 var BASE_URL = 'http:XXXXXX:9088';    //不是h5默认这个地址


 
//附上网络请求的封装
export default (options)=>{
   
	uni.showLoading({
   
		title:'加载中...'
	})
	return new Promise((resolve,reject) =>{
   
		uni.request({
   
			url:BASE_URL + options.url,
			method:options.method || 'GET',
			data:options.data || {
   },
			success(res) {
   
				if(res){
   
					resolve(res.data)
				}
			},
			fail(err) {
   
				reject(err)
			},
			complete() {
   
				uni.hideLoading()
			}
		})
	})
}

可以直接搬

  • 如果你要配置要网站多个子目录需要配置一些参数
    例如你的网站域名是https://testapi.kemiandan.com,然而你想配置在https://testapi.kemiandan.com/h5/h5目录下
    找到manifest.json文件打开源码视图新增
  "h5" : {
   
        "router" : {
   
            "mode" : "history",
            "base" : "/h5/h5/"  // 配置引用的正确的文件路径
        },
        "domain" : "https://testapi.kemiandan.com/h5/h5"
    }

然后把打包后的文件放在可访问/h5/h5目录下
访问路径 https://testapi.kemiandan.com/h5/h5/即可访问

  • 从中 想到 把 跨域 配置 去掉

安卓端 跟 浏览器端 差不多 就是 发个 OPTIONS 请求 跨域 验证 到 后端

在这里插入图片描述

  • 然后 你就可以 用 你的 浏览器(安卓端) 去访问 它(请求 你的 源代码 浏览器 进行 解析)
    包括 向 你的 服务接口 发请求 数据 回传 渲染到 页面
    在这里插入图片描述
  • 这是 用 浏览器 打开 (安卓同理 ) - 服务器端(接收请求 返回)

在这里插入图片描述
在这里插入图片描述

  • 这样一个 跨域代理 就解决了
部署

在这里插入图片描述

  • devServe是开发时候用的,正式环境不走这里
    如果 你 还用 devserve
    你会发现 请求 就跑nginx 前端服务器 去了 你的 proxy 没起作用

  • 所以 发布时候 就得 在 nginx 服务器 和 后端接口方面 入手

在这里插入图片描述

  • 先 确保 打包后 的 h5 能正常访问 并 发请求 给 后端
    供参考 这个 是 测试的 django 后端 接口 1474

android 的 webview 发送 校验options 到 后端
POST 请求 失败

在这里插入图片描述

  • 剩下 的事 就 交给 后端 和 运维的 处理 吧
  • 前端的 问题 结束

在这里插入图片描述
options在此问题中属于第二种,当涉及到跨域时,并且是post请求时,
本地服务器会先发送一个options请求到服务器,如果服务器认为options请求时无危险性且认可的,
那么在允许本地服务器发送post请求;
但是如果后端认为options请求是危险且不成功的那么会直接阻止本地服务器发送其他请求

  • 叫 后端 大哥 拿 Authorization中的token
  • 或者将所有options放行,此时便能通过post请求访问到数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

index页商品列表 与 数据渲染

页面请求 后台数据 至前台

后台地址

 请求三个值

 页面
 识别id
 token

Eg:示例返回结果

 {
   
    "code": 1,
    "msg": "success",
    "data": {
   
        "items": {
   
            "s10001": {
   
                "id": "s10001",
                "type": "search",
                "params": {
   
                    "placeholder": "搜索商品"
                },
                "style": {
   
                    "textAlign": "center",
                    "searchStyle": "radius"
                }
            },
            "n606196612728596": {
   
                "id": "n606196612728596",
                "type": "banner",
                "style": {
   
                    "btnColor": "#ffffff",
                    "btnShape": "round"
                },
                "data": {
   
                    "n400199453786769": {
   
                        "imgUrl": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201216101521e41cf3986.jpg",
                        "imgName": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201216101521e41cf3986.jpg",
                        "linkUrl": "page/index/index"
                    },
                    "n837367626101537": {
   
                        "imgUrl": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/202012161015204bd302747.jpg",
                        "imgName": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/202012161015204bd302747.jpg",
                        "linkUrl": "page/index/index"
                    },
                    "n39296042711415": {
   
                        "dataId": "n39296042711415",
                        "imgUrl": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201216101521eec407132.jpg",
                        "imgName": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201216101521eec407132.jpg",
                        "linkUrl": "page/index/index"
                    },
                    "n253302235811058": {
   
                        "dataId": "n253302235811058",
                        "imgUrl": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/202012161015214ae427082.jpg",
                        "imgName": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/202012161015214ae427082.jpg",
                        "linkUrl": "page/index/index"
                    },
                    "n894849566788663": {
   
                        "dataId": "n894849566788663",
                        "imgUrl": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201216101521f14513173.jpg",
                        "imgName": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201216101521f14513173.jpg",
                        "linkUrl": "page/index/index"
                    }
                }
            }
        },
        "newest": [
            {
   
                "goods_id": 3,
                "goods_name": "外星人",
                "category_id": 10003,
                "spec_type": 10,
                "deduct_stock_type": 20,
                "content": "<p>1111</p>",
                "goods_sort": 100,
                "delivery_id": 10003,
                "goods_status": {
   
                    "text": "上架",
                    "value": 10
                },
                "spec": [
                    {
   
                        "goods_spec_id": 5,
                        "goods_id": 3,
                        "goods_no": "20201226",
                        "goods_price": "111.00",
                        "line_price": "1111.00",
                        "stock_num": 11,
                        "goods_sales": 0,
                        "goods_weight": 111,
                        "spec_sku_id": ""
                    }
                ],
                "category": {
   
                    "category_id": 10003,
                    "name": "电脑",
                    "parent_id": 0,
                    "image_id": 10014,
                    "sort": 1,
                    "create_time": "2020-12-26 13:47:14"
                },
                "image": [
                    {
   
                        "id": 12,
                        "goods_id": 3,
                        "image_id": 10016,
                        "file_path": "http://192.168.0.100/www.cnthink.net/shop/web/uploads/2020122613485531f529442.png",
                        "file_name": "2020122613485531f529442.png",
                        "file_url": ""
                    }
                ],
                "goods_sales": 0
            },
            {
   
                "goods_id": 2,
                "goods_name": "外星人",
                "category_id": 10003,
                "spec_type": 10,
                "deduct_stock_type": 20,
                "content": "<p><img src=\"http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201226134850d97b07122.png\" _src=\"http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201226134850d97b07122.png\" style=\"\"/></p><p><img src=\"http://127.0.0.1/www.cnthink.net/shop/web/uploads/2020122613485531f529442.png\" _src=\"http://127.0.0.1/www.cnthink.net/shop/web/uploads/2020122613485531f529442.png\" style=\"\"/></p><p><br/></p>",
                "goods_sort": 1,
                "delivery_id": 10003,
                "goods_status": {
   
                    "text": "上架",
                    "value": 10
                },
                "spec": [
                    {
   
                        "goods_spec_id": 4,
                        "goods_id": 2,
                        "goods_no": "20201226",
                        "goods_price": "50000.00",
                        "line_price": "40000.00",
                        "stock_num": 10000,
                        "goods_sales": 0,
                        "goods_weight": 36,
                        "spec_sku_id": ""
                    }
                ],
                "category": {
   
                    "category_id": 10003,
                    "name": "电脑",
                    "parent_id": 0,
                    "image_id"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值