L04-获取access_token的方法
L04-获取access_token的方法1、方法定义:
读取本地文件(readAccessToken)
本地有文件
判断它是否过期(isValidAccessToken)
过期:重新请求获取access_token(getAccessToken),保存下来覆盖之前的文件(保证文件是唯一的)(saveAccessToken)
没有过期:直接使用
本地没有文件
发送请求获取access_token(getAccessToken),保存下来(本地文件)(saveAccessToken),直接使用
2、getAccessToken()
要引入config模块
需要下载request、request-promise-native模块,但只需要引入request-promise-native,终端输入npm i request request-promise-native进行下载
3、测试
const w = new Wechat();w.getAccessToken();
结果如下:
4、计算失效时间
当前时间+7200s-5 ...
L03-获取access_token的设计思路
L03-获取access_token的设计思路1、什么是access_token?
A、access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需要使用access_token。
B、access_token的存储至少要保留512个字符空间。
C、有效期目前为2h,需定时刷新,重复获取将导致上次获取的access_token失效。
D、接口权限,每天最多获取2000次
E、接口调用请求说明
F、返回说明
正常情况下,微信会返回下述JSON数据包给公众号:{"access_token":"ACCESS_TOKEN","expires_in":7200}
错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):{"errcode":40013,"errmsg":"invalid appid"}
G、返回码说明
2、新建03_获取access ...
L02-模块化代码
L02-模块化代码1、提取config对象
创建一个config文件夹,新建index.js,主程序引入config模块
2、提取服务器验证模块
创建一个wechat文件夹,新建auth.js,在此js文件中引入sha1模块和config模块
3、app.js中引入auth模块
L01-验证服务器的有效性
L01-验证服务器的有效性1、在webstorm中打开文件夹wx_zwtx,在项目底下新建day01文件夹
2、接着day01下新建一个js文件,命名为验证服务器的有效性
3、打开终端,进入wx_zwtx根目录,输入npm init进行初始化,输入名称wechat_test、版本号1.0.0等一些信息,结束后会生成package.json文件
4、安装express
终端输入npm i express
5、进入ngrok官网:www.ngrok.cc ,进行内网穿透,下载客户端,连接
6、将地址填写至申请的测试号的接口配置信息中
7、代码编写如下:
8、测试微信服务器提交过来的参数
先运行服务器,再在网页上提交接口配置信息,观察控制台接收到的信息,结果如下:
9、分析
{ signature: ‘4b72756afd11a7533c01ade9ce2bcc306dbc0e4f’ echostr: ‘1592125008023124477’, timestamp: ‘1631236605’, non ...
L01-人工智能导论
L01-人工智能导论人工智能是什么?火星车?智能语音助手?自动驾驶?
目前没有一个公认的对于人工智能的定义,我们要接受并理解这个世界的复杂性,以多维度、多角度来观察问题,切记故步自封。
从时间维度来讲
图灵:图灵机—可以做所有的数学计算,但不能判断自己何时停下。
冯诺依曼:将图灵机从论文中搬到了现实中。
1956年,首次提出人工智能的概念。Artificial Intelligence:Every aspect of learning or any other feature of intelligence can be so precisely described that a machine can be made to simulate it.
期望用函数拟合来解决问题,但并不能解决基本的XOR问题,所以后来使得AI研究转向了Symbol和Logic。
Hinton—反向传播:给予大量正确的label,让机器自己去调整、拟合最优的函数。Kai-Fu Lee【语音】——奠定了机器学习的基础:通过大量的数据、标签来进行拟合、学习。
1998年,可以识别文字了,但遇到了机 ...
神奇的React
神奇的ReactReact的特点1、声明式写法
React可以非常轻松的去创建用户界面,为你的应用的每一个状态去设置一个简洁的视图,有改变的时候,React也能高效的去更新这个渲染界面。
声明式写法是强调结果的,与之对应的是命令式编程,是强调过程的。
2、组件化
React是基于组件的一个设计流程,组件让代码的复用、测试、分离都变得非常简单。
3、一次学习,随处编写
无论使用什么技术栈,我们都能随时引入React开发新特性。React可以开发Web程序、原生手机应用,系统应用、命令行工具等等。
当你学习一项工具之后,能胜任多种工作,何乐而不为呢!
为什么要学习React1、大厂加持2、简单易懂3、最流行的,使用人数最多,开发人员最喜欢的
React开发环境配置重要!!确保自己电脑上C++的编译环境已安装好,不然会报错!1、打开命令行终端,输入安装指令:npx create-react-app react-hooks(此条命令适用于npm 5.2+)
推荐:进入自己的项目文件夹,输入create-react-app react-hooks
...
Electron实战-本地文件的读写
Electron实战-本地文件的读写知识准备我们所熟知的Node.js中提供了一组类似于UNIX(POSIX)标准的文件操作API,为我们的文件操作带来了巨大的方便。同时,在fs文件系统中,模块中的方法均有异步和同步版本,例如,读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。
异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。所以我个人建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。
其中,对于文件操作有这么几类常用的函数:
fs.readFile() :读取文件
fs.writeFile():文件写入
fs.appendFile() :追加写入
fs.rename() :文件名修改
fs.unlink() :文件删除
由于fs模块中并没有对文件的复制,但是我们可以通过以上操作自己封装一个:
而对于文件夹操作有这么几类常用的函数:
fs.mkdir() :目录创建
fs.chmod() :修改文件夹权限
fs.exists() :判断文件或者文件夹是否存在
f ...
Electron知识详解-进程之间的通信
Electron知识详解-进程之间的通信前提准备1、首先,我们要知道,Electron是使用IPC在进程之间进行通讯的。下图呢就十分生动形象的表示了这种通讯方式。
2、那有没有什么方法可以让这些通信更为可视化呢?有的,那就是Devtron。接下来我们就来尝试着安装一下Devtron插件。
进入Devtron官网,按照提示进行插件的下载安装。
安装完成
验证安装-在main.js中添加一下代码:
运行一下,打开devtron插件,如下图所示:
【重点!本人安装devtron后,运行会报错,原因为新版不兼容,我们可以安装旧版。】输入:npm i electron@5.0.6 -D,安装此版本运行即可。
代码实例1
目标:在我们的页面上增加一个按钮,点击它,将我们的事件发送到主进程,然后主进程再进行回话,之后渲染进程将这个消息输出到界面。
1、首先,在index.html中增加一个按钮,id设置为sendmessage,内容为Send message to main。
2、接着,我们在renderer.js中添加一个点击事件:
从 ...
Electron知识详解-BrowserWindow
Electron知识详解-BrowserWindow准备
首先,按照官网,快速创建一个项目:
小Tips
程序入口为main.js,所以当main.js有改变的时候,每次执行我们需要关闭命令,重启一遍,这样就会给我们编程带了较大的麻烦。所以我们该怎么解决这个问题呢?
解决办法:我们需要下载一个辅助工具nodemon,他可以监控文件的变化,自动运行命令,这样就省去了手动操作,非常方便。
安装:进入项目文件夹,输入命令:npm install nodemon --save-dev
安装完成后,打开项目的package.json,可以看到在deDependencies下多了一项nodemon。
接着在启动脚本scripts下修改start为nodemon --watch main.js --exec \"electron .\",如下图所示:
BrowserWindow 1、首先,创建index.html文件
2、打开main.js文件,进行编辑
首先,从electron引入app和BrowserWindow
接着,实例 ...
Electron知识详解-主进程与渲染进程
Electron知识详解-主进程与渲染进程什么是process-进程什么是thread-线程
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际的运作单位。
可以用下面这张图来形象的表示进程和线程之间的关系。
进程和线程之间的区别
内存使用方面的区别:进程与进程相互之间的内存不能共享,而进程中的各线程的内存是共享该进程的。
通信机制方面的区别:进程通讯可以使用ipc,线程共享进程的内存,通信起来十分方便。
量级方面的区别:线程更为轻量级
Electron主进程和渲染进程
Elecrtron采用的是chrome一样的多进程机制的。(可通过资源管理器对他们进行比较)
以下这张图可以形象的看出主进程和渲染进程之间的关系:
主进程-Main Process
可以使用和系统对接的Electron API-创建菜单、上传文件等;
创建渲染进程-Renderer Process;
全面支持Node.js;
只有一个,作为整个程序的入口点。
渲染进程-Renderer Process
可以有多个,每一个对应一个窗口;
每个都是 ...