你有没有想过,为什么现在很多网页应用能如此流畅智能,像懂你心思一样,实时响应你的每个操作?这背后一个叫 v o 点 g s 的 前端框架功不可没, 但会用它和懂它完全是两回事。今天要聊的这本深入浅出 v o 点 g s 就是 帮你从使用者变为洞察者的关键。它不教你写基本的组建,而是直接带你潜入 v o 点 g s 的 源码核心去理解它,流畅体验背后的设计哲学与精妙机制。 就像理解经济体系要先看懂银行的运行逻辑一样。这本书的核心是解密 v o 要点 js 的 三大基石。第一是变化侦测, 你可以把它理解为一个极其智能的数据监听系统,书中会带你从零实现一个简易版,让你彻底明白为什么你修改了数据,试图就能自动高效的更新。第二是虚拟 d o m, 这是一种为了提升性能而设计的更新策略。通过对比虚拟 d o m 数的变化, v o 点 g s 能以最小的代价更新真实页面。这好比一个精明的管理者,只调整必要的流程,而非推倒重来。第三是模板翻译, 它揭示了如何将你写的简易模板翻译成高效的渲染函数。这是框架将声明式语法转化为底层命令的翻译官。对于开发者而言,吃透这本书意味着你不仅能更高效地使用 v o 点 g s, 避免很多因理解不透导致的性能陷阱和复杂 bug, 更能获得一种通用的框架设计思维。 这种深度的理解是你在面对任何新技术、新框架时,能够快速抓住本质,举一反三的核心能力,在技术驱动的时代,停留在使用层面,只会疲于追赶,理解原理才能获得掌控力。关注我,带你读透每一本皆是技术本质的好书。在代码与逻辑的世界里,看懂设计、驾驭创新。
粉丝4531获赞4.2万

一分钟教你英伟达的免费 a p i 怎么样去接入 cloud code。 我 们先来到英伟达的开放平台,在这里呢,我们先注册一下账号,输入你的邮箱就可以了。然后呢我们生成一个 a p i key, a p i key 的 名字可以随便填,生成好之后呢,我们把它 a p i key 复制一下。 然后呢我们来到 github 下载一个软件,叫 cc switch, 找到这个软件,然后进行下载, 这个软件呢可以很方便的帮我们去管理我们的 cloud code 的 配置。然后呢打开主页之后,找到这个 releases 啊,找到第一个,然后呢下拉下来,选择我们平台对应的下载包,比如说我这边是 windows 的, 就可以选择这一个, 把它下载下来,打开这个软件,然后呢我们可以看到右上角有一个新增供应商,选择自定义配置,我这里呢不重新配置了,看一下我是怎么配置的。首先呢,供应商名称可以随便填,然后呢 api key 填一下,看看你在公官网申请的那一个 api key, 然后呢请求地址填我这一个。然后呢 api 格式这里要注意啊,一定要选第二个 open ai 的 一个格式。然后呢模型名称我选择了 kimi 的 k 二点五,然后进行保存,这时候呢就配置好了。 然后呢我们打开 cloud code 来尝试一下,给他发信息,刚刚我们配置的供应商要记得起用一下,不然的话会不生效。然后呢可以回来 cc switch 里面看一下刚刚的使用统计。下拉下来可以看得到刚刚请求产生的 token 输入和输出分别是多少。 在英伟达的开发者平台里面呢,是支持很多种模型的啊,你可以按自己的喜好来选择,只要在右上角优酷里面点开这个,查看具体的模型型号,准确的填写,就可以切换模型了。 因为是完全的免费使用的人会比较多,有时候呢会比较卡顿。如果这条视频对你有帮助,记得点赞收藏关注。

cloud code 的 源码经过折腾,已经顺利通过源码翻译后跑起来了,手里只有一个 cle js m a p, 我 要把它反翻译出来,恢复成一个能翻译能运行能进 api 调用流程的 cle。 目标不只是 help, 而是尽可能接近原始项目行为。最终结果是, node disk cle c j s version help p h i 都跑通了,程序能进入真实的请求流程。

想玩转能自动写代码打包软件的生产力引擎?先别急着敲命令,底层运行环境没答对,后面全白答。只要死磕,接下来的四个核心配置步骤, 能帮你避开百分之九十以上的系统报错一次跑通。第一步,直接去官网下载 nojs 的 长期支持分支,也就是 lts 版 安装像导弹出来后,别去改默认的 c 盘路径,一路点下一步,停一下,这里有个百分之九十新手必踩的天坑。 安装界面会出现一个叫附带必备组建的勾选框,盯紧它,必须打上勾,很多人随手跳过,结果后续包管理器的自动部署直接崩盘。不勾这个 后面的翻译报错满屏飘红,够你熬夜查一整天资料都修不好。环境装完,进入第二步,右键以管理员身份运行终端窗口,敲入查验版本信息的指令, 只要屏幕上正常弹出一串具体的版本号数字,就说明你的底层底座彻底打稳。趁热打铁,把主程序的自动化部署指令复制进去,敲回车,让他跑完。代码跑完不代表万事大吉, 必须再敲一次版本查询指令,看反馈,只要看到最新程序的版本号,这个环境闭环就算完美确认。想要让系统拥有真正的智慧, 现在进入第三步,接上云端大脑,你需要去获取一串由字母和数字混编的专属通行秘钥,也就是 a p i t, 它是你的本地引擎与云端算力进行交互的唯一身份凭证。 关键操作来了,借助第三方接口切换软件时,选准节点只是基础,把密钥贴进去激活也才完成一半,千万别忘了钻进切换器的后台设置,找到那个针对该程序的专属功能开关,并手动把它拨开。 如果不拨这个开关,你的密钥就是废纸一张,程序会因为无法穿透网络环境而卡死在联网环节。现在进入最后一步,养成日常操作的防坑习惯。记住,不管你执行什么指令,系统控制台永远保持以管理员身份启动。 另外,强烈建议你把老旧的命令提示符换成进阶版的 power shift, 它的交互逻辑更先进, 敲代码的顺手程度会让你事半功倍。最后,关于扩展组建,一定要管住你的手,千万别为了图省事去乱下那些不明来源的包, 哪怕那个包宣称功能再强大,只要不是官方原装的模块,就坚决别碰。认准官方原装是保证你这套自动化工作流既不被挂码,又能长期稳定不崩溃的唯一底线。

今天给大家介绍一种可以免费养虾的办法,我们打开这个网站, 然后你要先登录,好吧,想办法登录这个网站,然后我们骑到模型这里, 我们找到一些免费的东西。好,现在有那个千玺三点六 plus 的, 有今夜星辰的三点五 flash, 还有这个英伟达的,质朴的都有。好吧,就看你想用哪个。那比如说我们想用前面三点六,那么我们就切到这个 ipi case 密钥这里。 这个我先不管他,现在我们新建一个,你就建一个名字吗?好, 这是蜜柚。好吧,我们点击复制就复制好你的这个蜜柚,之后你可以放到你的那个龙虾那里。好了,我们直接用这个 cherry studio 来验证一下,看行不行。 这里是。呃,首页,然后到设置这里,然后我们在这个模型这边找到 open loop 就 行了,然后我们刚刚刚复制进来了,我们检测一下能不能行。 这里有个免费的。这个 好,这里显示连接成功,我们这里有个三点六,如果没有的话,你就是 点击这里获取模型,你搜一下这里,然后他这里就会有一些他出来的这个带免费的这个后缀的这个模型三点六,然后但还有其他的哈, 看你想要哪个。那 mini max 二点五。好,我们这里我已经给它加上来了, 我们测试一下,我们对话测试看一下。 嗯,随便添加个默认助手,有段时间没用了哈,我们切换成这个模型,我们直接打个字吧。 好,它是能够正常回来的哈, 那同理,你把刚刚复制的这个 api, 你 把这个 api 复制到咱们的那个龙虾的面板上, 配置就能用了。好吧,但是这个免费的模型他有个有个问题,就是说他可能会应答,会超时,以及你的数据是可以被他用来训练的, 这个需要注意一下,但这个只是用来就是咱们想免费体验一下怎么养虾,好吧?至于你要拿来做 webcody 啊,也可以,但是还是建议上国产的那些 open plan 或者 coding plan 付费,但是你可以先免费去体验一下,感受一下什么是养龙虾,什么是 webcody。 哎,可以简单去 去试用一下,你要觉得合适的话,你再再付费就好了。好吧,今天就这个视频就到这里。

ok, 大家好,上一步我们完成了相城派 airpods 系统上路,然后这一期我们来教大家,嗯, 获取一些比较便宜或者说免费的 api 吧。然后我这里收集了有四家,呃, mini max、 英伟达六 api 和智普 api。 首先是迷你 max 它的 api 吧,它新用户注册是直接送十五块代金券啊,可以直接消费。呃,你前期测试的话还是比较合适的。然后是英伟达 api, 英伟达它模型非常多,呃,它大概有四个常用模型, 嗯,他是直接免费,但是说他一分钟调用不能超过四十次,然后这就是他主要的限制,而且他免费,我觉得这一点非常棒啊。然后我也用过这个,感觉挺不错的。然后是智普的 api k, 智普的话他是新用户,送两千万的托肯体验包,但是我们主要用的就是呃, glm 四点五 ar 这么个包,他有一千两百万的托肯也是差不多够用。 然后这个六 a p i 他 家,他家 a p i 比较稳定吧,然后模型比较多,然后最近的话他家做那个活动,它 grog 的 模型是直接免费的,免费调用。然后我们这次就来看一下具体怎么操作。我们先复制这个链接,然后取到浏览器, 然后你会发现他这里会说什么什么什么,立即进入 a p i, 我 们直接点登录 a p i 开放平台就好了。然后我这里就直接登录一下吧。 小姐,请问一下有没有卖半岛铁盒?有啊,你从前面右转的第二排架子上就有了。哦,好,谢谢。不会, 然后我们这里就可以看到你的一个基础的账户信息,然后我们直接看这个代金券记录, 他就会跟你说你现在有十五块的代金券可以直接使用的,然后代金券也是有这个有效期的,他这个有效期是两个月,两个月足够你用完的十五块了。那我们再看下一家 英伟达的模型, 英伟达其实提供了非常多的模型,他这里提供什么? kimi 二点五、英伟达三,呃,迷你 max m 二点五和智普的 g i m 五模型,它们这四个模型就是最经常用的模型。然后它相比来说, 如果说你用的不是很频繁,那么用他可能是最合适的了,因为他免费吗?然后一个小一分钟四十次调用,如果你没有很大的需求,用它完全足够。然后这里我就不登录了,然后就可以看一下他到时候会有一个 api k 的, 然后是智谱的模型,我们也去复制一下。 然后可以看到他这里是注册就送两千万的托肯体验包,我这里就不登录了,他这里注册之后,他就会直接到你的资源包上,根据那个文档直接调用就好。 然后是这个六 api k, 他 家也是我经常用啊,感觉非常 ok 啊 啊,特点就是模型多,价格便宜。然后最近那个戈尔肯模型免费调用嘛,性价比直接拉满。 呃,我也,我登录一下吧, 那你看到我这里还有十九块钱啊,很少了很少了。然后看一下他控制台, 那最近这个 gogfu 还是免费的,那这些模型全都是免费的,现在那就对于我们来说比较友好了,那聊天生产力也是足够了。然后 这四款 api 就是 我收集的一部分,然后大家选择其中一款进行调试也可以,或者说你也可以找到其他的 api 来进行。嗯, 给你的小龙虾注入灵魂。然后下一步我们就可以安装一下 opencloud 的 相关依赖和环境搭建了,然后这期就到这里。

今天我们就聊一下怎样开通 gs, 它的一个通过率是最高的。 gs 是 我们经常用到的一款支付产品,它的应用场景主要是微信里面的小程序,它是不支持 h 五的。 开通 js 之前你要准备两样资料,第一营业执照,第二小程序,这两样都准备好之后呢?然后你来到了支付宝签约产品这个页面,你选择 js 点击进去, 然后我们来到了开通这个页面,你选点击开通,然后来到了这个页面,你选择你所经营的类目,如果说你是做餐饮的,那就选择餐饮行业,如果说你是做 百货的,那你就选择百货这个行业。选择完你的类目之后,再不的话就是上传营业执照, 在这里我推荐的是电子营业执照去上传,因为这样子的他的一个,他的一个真实性会比较高。下一步就是交易场景,这里这里我们点击选择小程序,我们再来看一下他的一个费率是零点六, 这些都选完之后,上面就是填呃,联系人,把联系人填上去,点击勾选申请开通就可以了。

制高标签打印软件,通用的打印机开发接口, c c p i p i 它可以通过 ip 的调用来进行文本的打印,条码的打印,二维码的打印以及图片的打印。那么通过大量的工业场景以及物流仓储的使用,那么 c c p i p i 它具有清亮简洁、稳定可靠, 支持近百个品牌等数千个型号的打印机。他不光支持我们的标签打印机,他同时也支持单据打印机,真实的单据打印机和商业的小票打印机, 包括我们的半勾打印机, s 的半勾打印机。假如你在一个系统里面需要集成各种打印机来应对不同的使用场景,比如说我们在打印标签的时候可能需要标签打印机,我们在打印票据的时候可能需要用真实打印机, 那么我们在打印报表的时候,可能又要用到我们的这个激光打印机, s 的激光打印机,那么你使用 c c p i 啊这一个 ipad 接口就帮你把这些实验都可以去 做了,那么它所以它在你在这个系统集成及部署上面来给你提供了极大的便利。哎, 它是一个通用的开发接口,那么它也支持我们的主流的开发语言,比如说我们前端的常用常用的这个开发语言,比如说加法思维啊被,那么这个在前端的开发也是非常方便的,比如说我们的假瓦语言,还点代的语言,点代语言,你把 c 下部啊,未必点代的都可以, 包括我们点开的最新的五点零、六点零、七点零,那都都是支持。那么帕森调用接口也是非常简洁, 我们最老的语言支持,比如说这个 v b 六点零,嗯,它也是很好的。那比如说 v b s, 那么我们在这个 excel 里面脚本里面进行 excel 内部的一些系统的一些开发,可以用 v b s 来做,那么用我们 ipi 接口也都是,嗯,能够很好支持的。你像我们一些用户,他们在做一些 些其他的一些财务系统的一个插件的集成,那么他就通过 vbs 直接调用我们的 pr 接口,那么包括这个 c c 加加那些场景也需要使用,所以他对不同的语言支持,他,那么的这个开发的这个接口调用的方法也是几乎一致的。嗯, 我们看一下这个 vivo 的一个基本的一个用的流程,那么那么首先,嗯打印的话,嗯肯定是要先设计一个打印模板,不管我们是在做这个标签的打印,还是做这个呃,商业小票还是单据爆表的打印,我们首先通过我们那个设计器来设计一个模板, 我们把这个模板把它存到我们的服务端或者是客户端都,这个都可以是根据你系统的部署的特性去去决定。那我们的 ipi 给你提供灵活的这个配置方法,那么在微游这个项目当中,我们引入我们提供的这个微库啊, 然后呢就是可以通过这个获取打印机的这个方法,这个里面我们提供这个方法来获取打印机,获取打印机以后我们可以给它显示出来,然后跟我用户在打印的时候进行选择,选择使用哪一台打印机去打印。 那么当然如果你这个打印机的名称是固定的,你这一步的方法完全可以省略,可以忽略,你可以不用打,那么我们可以直接在打印的方法当中去配置打印机。哎,我就直接把名称写死,这我这个名称是固定的,那么这个一些简单的项目,这个也是可以这样去做的。 那么这个第三个方法,那么就是啊,我们就是传,哎通过 ipa 来传给打印机, ipa 打印,那么它主要就是三个,一个就是指定打印机,然后配置模板,然后传递打印数据,那这里面我们就指定了打印机,我们这个打印机是通过这个下拉框来选择的,这个就是我们这一步通过下拉框来选择,那么然后通过这两个属性来配置模板。 哎,我们这边你看这个是存在服务端的,我们通过远程来调用,那么这个是我们存在客户端的,就是我们存在一个本地的一个文件夹,那么这个是我们的模板的文件名, 那么这个是打印数据,我们这个这个打印数据我们也提供多种的这个数据的传递方式,那么这个里面我们是通过一个接送数据来传递这个打印数据啊。最后通过这个这个 excuse 这个这个方法来进行打印打印,不管他是成功与失败,那么他都会有一个回调,我们只要检测这个回调就可以了,在这个回调里面来进行一个呃,我们打印后的一个处理, 我们看到我们这个打印方法调用的是非常简洁的,嗯,所以经过大量场景的应用,嗯在系统集成上面他是非常便捷的,就是几乎没有什么那个需要特别去说的地方,就是你用起来也非常方便。也部署的话,我们用完 pr api 的话,那个安卓帽也是非常小, 对,不像一些设计器可能有几百兆,我们也就几兆,就是非常,嗯,那个清亮的,嗯,这个就是治国表现大专阶 cc 跟 dnpr 的一个基本的一个介绍。

支付宝的 shopping 支付是什么?它就是给支付宝小程序这个收款场景专门配置的一个支付通道啊, 它仅限于用户在商家小程序下单的时候使用的一个通道,这里我们可以看得到啊,它是不能通过拉起 h 五页面来做这个 shopping 支付的啊,这里有一个, 这里有个使用市力啊,就是在小程序里面直接拉起支付,然后它的申请条件的话是可以用个人支付宝或者是企业支付宝啊,那么个人支付宝的话也是需要营业执照的,并且申请的时候它必须要有一个已经创建的小程序才能够申请啊, 那么费率的话这里是百分之零点六到一啊,那它也是支持咱们信用卡、花呗等等一些支付方式啊, 这里的话它的退款以及它的结算方式跟当面付是一样的,你像结算的话也是要新签约商户要满九十天或者连续交易满三十天的商家才可以秒到啊, 否则的话是次日结算,它也是支持这个商家分账的,那是根据咱们的这个分账比例来进行一个设置。

普通人怎么参与 token 这项业务呢?首先要明确一个逻辑啊,就是 token 生产的这件事情是大厂的专属赛道, 不管是算力 token 还是用模型去调用 token, 这个背后其实都需要很大的这个服务器集群 技术研发合规的这个资质,普通人既没有这个能力,也没有资金参与,强行入局的话呢,只会血本无归。所以普通人要做的就是避开生产端,你去聚焦这个流通端,做上下游之间的链接器,全职的时间呢?去代理 tokken 的 销售,或者搬运一些便宜的 tokken 的 a p i 呢?去海外的这个市场去销售。我给你们四条建议啊, 第一个就是千万不要去找那些不靠谱的算力设备平台去托管投资,投个几万几十万的跟你说,哎呀,能在一年到两年回本,三年到四年翻番的, 你们记住了啊,没有那么多天上能掉馅饼的事情给你。第二,如果你是云服务算力或者是 ai 相关行业的人,那么快速调整到托肯工厂的这个赛道, 这个赛道的发展速度其实是会很快的,现在 ai 的 建设进场速度呢,非常非常的高,你们需要提前在技术和岗位上进行调整,要等待时机。然后第三的话呢,如果你既非技术人员啊, 那么可以选择在电商平台或者分发平台进行 token 的 销售,但是它不能像卖房子那么简单,它有一定的学习的门槛啊,不过我认为在现在 ai 工具的驱动下,一般人都是可以学的会 学的懂,而且学的很快,并不是只有那些学大模型算法的那样子高不可攀。然后第四,如果你不想投资建设,也不想学技术,甚至不愿意去做这个 token 的 销售, 那么你就把 token 的 场景融入到你的工作当中,比如说用它去写一个 ppt, 用它去做个短视频啊,做文案就是能让 ai 做的,你自己就不要去再参与了。就是你再用豆包 deepstack 的 时候,其实就是在用别人免费给你的 token, 所以 这个也是普通人参与 token 的 工作方式之一。

大家好,欢迎使用开微控制精灵,今天主要讲 api 函数。使用第十三课斯科赖的数据库操控类、定时器类和剪切板读取函数 啊。现在看这个 ccli 的数据库类。呃,这个类的话讲的顺序是从这个创建数据库,添加表,呃,添加数据到更新数据,删除数据,删除表,最后关闭数据库链接这样一个顺序 哦。我们先来创建一个数据库,创建的话是用我们这个科瑞的这个函数。呃,传说是一个 pass, 就是我们要创建这个数据库链接。呃,这个路径 啊,如果这个帕子他已经存在的话,就是有这个数据不同啊,他是直接链接的,如果没有的话他才会创建 这个。我们来演示一下。呃,我到这个,呃,我要创建的这个 路径是我根部录下面这个 a 文件夹下面,在这个下面充电 创业的名称叫 s q 点 d b。 好,下面的话就是教练这个可谓的函数。点击调试可以看到这个 a 下面生成了两个文件,第一个 c q 点 d b, 就是我们的数据库文件。呃,第二个的话就是这个 c quad 的一个零十分之日制文件。这个的话就不用管。 接下来穿完这个数据库之后,我们可以创建一个表,穿完表用这个科瑞的 table。 这个函数里面是两个参数,第一个参数就是我们表的名称,就是表要叫什么名称, 这个是类型的。第二个这个是我们这个列的名称,是一个数组类型的,就是一次可以添加多个列。 这个来演示一下 啊。看这个代码,首先是定要这个 clai 的 cread 传入我们这个参数,创建一个叫 study 的这个数据库, 然后这个数据库里面有三个字段,也就是列呃 id 字段,内幕字段和的专字段。这个它反为值,也是一个波尔类型的。 ok, 就是代表是否创业成功。嗯,在后面打印一下这个 ok 的结果,点击调试, 他反映的是一个处,就说明现在我们已经创建这个表创建成功了。创完表之后,我们插入一些数据, 呃,用的是这个银色的插入数据,呃也是两个参数。第一个参数的话是我们表的名称,就是要插到哪个表里面。呃这种刚才创建了一个丢链表, 呃,这样的话就是我们这个 tv 内幕穿的就是 studing 的。呃后面这个这个参数的话就是我们插入的数据对象,注意它是一个对象,是下面这种类型的。来演示一下。 首先创建一个对象叫 obj, 然后它里面是 id 内幕额度 rs, 然后负了三个值。 然后下面这个是我们要插入的这个表明是丢顿的。然后在这里调用了 cicola 的点银色的就是插入数据。 首先是这个表明,然后我们插入的数据,最后也是他的反应类型,也是一个波尔类型的。 ok, 然后最后最后打印一下, 测试好,他是插入成功。我们多插几条数据。 现在说我们是插入了三个数据。插数据之后我们可以调一下面这个查新表数据,这个参数把里面的数据给打印出来 啊,它里面的话主要是这个。呃一个参数就是我们要执行的这个查询语句, 他反映的话就是一个 sun 类型的。这个 super 串 好,首先看呃第一条第一行就是我们定义的这个 c 会语句谁来个新房子丢顿的就是查询这个表里面的全部数据啊,当然我们后面也可以加些数据。呃,加一些条件。 然后第二个就是我们要执行这个 c 口语句了, c 口来的这块瑞传入这个 c 口语句,返回的这个数据我们用对了给他接一下,然后我们打印的时候把他让他打印到这个控制台上, 卡色的料个 tat 好调试一下这个控制在上显示我们刚才差不多这三条数据。 id 等于一二三的三条数据啊。这个我们给大家保存一下,后面我们还能用到。 查询完之后我们这里下面有一个更新,就是更新符合条件的数据 啊,不对,他呃是传入三个参数。呃,第一个参数的话就是我们要更新哪个表的数据,就是推波内幕表明。然后第二个什么要 更新的数据,就是更换的数据。呃,就是第三个的话就是我们更新的条件,就是在什么条件下要更新这条数据, 然后返回的也是一个波尔类型的 ok 代表是否成功 啊。首先看这个代码,呃,第一个我们定义的是一个这个贴封内幕表明就是我们要更新哪个数据库,呃,哪个表里面的数据。 第二个这个是我们更新后的这个数据把内幕呃把要更改的这个一条记录,把他的内幕变成更新数据,额的 dress 有有变成这个深圳。 第三行我们定义的是这个更新的条件就是这个。这现在的话就是 id 大于一的时候都会更新。嗯,给大家 改一下。 id 大于二。这样的话我们刚才插入了。呃,三个数据一,二,三。所以他只会更改 id 等于三的那条数据,把它的内幕变成了更新数据,而 zs 变成了深圳。 下面的话就是调用这个啊,不对的。函数传入表明更新的数据。更新条件。最后打印结果。调试好。这里显示我已经更新成功。我们再查询一下全部。 好,这里 id 等于三这条这个数据,他的内幕变成了更新数据。俄罗斯的身份证,这是这个阿,不对,他 接下来我们这个是还有这个语句。这个的话就是直接执行一条四个语句。常用的参数是一条四个语句。然后法国队也是一个 类型的。是否成功, 这个我们给他注掉。 好,这里粘贴下来。这里执行的 cq 语句是这个底内的删除表数据,就是对应我们这里个函数删除表里面的数据。呃,直接放这个 cc 语句就可以了。 呃,这条语句呢,删除的是 cu 证表里面 id 大于五的数据,我们这里改一下。现在没有 id 大于五的数据啊。直接删除 id 等于三的这条记录。好,删除成功。 来再来查询一下全部数据。这个时候 id 等于三那条记录已经被删除了。 这里在住柳 删除完表数据之后,我们可以删除这个。呃,删除表用的是我们这个 tobe, 直接冲入这个表的名称就可以了,好像这也是 bug 类型的。 然后这个内幕等于 student。 然后闯入这个参数,调用这个 table, 点击调试。好,反正就是这个处。 这时候我们再来查询一下全部数据,然后因为我们直接把这个表的表给删除了,所以他应该查询不到数据,反映的是这个空。 然后最后我们来关闭这个数据库链接, 直接扔 sque light 点儿 clothes 就行。 访问的实数关闭成功。最后的话还有一个这个还这砍数该的。拉斯艾若就是获取上一次执行 ceo 的错信息,就是如果我们执行任 ceo 有句报错的话,我们可以调用这个,然后他会返回这个报错信息。这个我们就不再显示了, 他直接仿为一个麦色界的军字符串。好,接下来我们来看一下这个定时器类。定时器类里面主要是两个函数, 看看这个第一个呃赛特特曼奥特创建一个单次使用的定制器,注意是这个是单次使用的。然后上面这个创建一个可以循环使用的定制器。 我们先来讲下面这个,这里面的话主要穿两个参数,第一个参数就是我们定时期要执行的函数,是个换个类型的函数。然后第二个参数就是我们 要要执行的时间间隔,单位是毫秒。我们看一下下面这个实力。 首先调用这个赛德特帽的穿入两个参数,第一个参数是从这到这是一个方向函数,里面打印的话就是哈罗二这个这句话。然后 啊,执行间隔是三千毫秒,就是三秒,就是他会延迟三秒之后执行这个方讯这函数打印这个话来调试一下,等待三秒, 好,他打印出这句话。这个是这个单次使用的定制器啊。上面这个创建一个可以循环使用的定制器,他俩的区别就是呃,如果这个他不调用上面这个 ctrl 取消定制器的话,他会一直执行, 然后里面的参数都是一样的啊。我们上来先看上面啊,调上这个可以循环使用定制器,然后传入我们只要执行的方式。函数也是打印这个哈喽 执行时间间隔是每隔三秒时间一次啊,在这里,然后这里延迟了这个十秒。十秒之后我们调上这个 ctrl 函数,这个 ctrl 函数里面 小城我们的一个定时器,定时器对象,他会把这个定时器给取消掉,就是不会再再让他执行了。点击调试, 隔三秒他会打印一次。 这个就是我们这个今日系列啊。接下来讲一个新家的这个全球 函数,这里面新加了一个 get 可爱不,就是获取剪切板内容,他这话用法是非常简单的,直接调用,然后返回的是一个四顺旅行的当前剪切板的内容。这个我们来演示一下, 比如说我现在复制啊复制这个东西,然后我们来调试一下,他会直接打印 好答案的。是整段的话。本节课内容就到这里,感谢大家观看。

hi, 欢迎回来,那么本节呢,我们就会实际的上手构建一整套的 endpoint 的 端点,当然你叫它 api 接口也是没关系的。那么首先呢,这里我展示了一个使用 express 来构建好的一个版本,在这个版本中呢,可以看到在我们的 control 中 实现了 c, r, u, d, find, all, find, one, create, update, 还有 delete, 也就是大家最常见的这样五个对应的 路由处理器,或者说对应的 controller 函数,然后绑定的过程呢,我们同样的是通过 express 内置的这样一个 router 对 象,将对应的路由地址还有对应的 h, g, d, b 方法和这些 controller 函数绑定在一起的。具体的这个操作的过程呢,我们就全部以操作本地变量的形式来 模拟我们的数据库访问。大致的架构图呢,其实和之前是大差不差的,就是改了一下文件的名字,那我们就通过 nest js 来尝试去实现这样一套完整的 c r u d 流程。来看一下 ness 的 js 在 实现一个 c r u d 接口或者是端点的时候呢,比起我们之前的 express, 它到底好在哪里?来到我的课程文件夹这里,我重新创建一个新的 ness 的 js 项目 new, 那 这里我加上杠 g 杠 s, 这样的话我就不需要让它帮我们出使唤对应的 get 仓库,也不需要让它帮我们安装对应的项目依赖,这里我就叫做 to do app 选择偏偏创建完成,进入这个项目中,直接打开, 同样的,先删掉不必要的东西,删掉不必要的项目依赖, ok, 然后呢,打开终端,安装我们的项目依赖, 一切就绪,那么接下来我们要实现的就是一套基于 to do 来修改的一个 c r u d 接口,那么我们看一下我们这个项目,它给我们的项目模板中,它所对应的 controller 是 怎么实现的?可以看到 controller 在 nest 的 j s 中呢,我们要写一个 lay 类的名字,就是就是我们要修改的这个数据后面跟上 control, 那 这就是一个类名,然后呢它需要写上这样一个装饰器,那么这样一个类中间所对应的这样一些路由的处理函数呢,我们全部都要给它附上相应和这个 h g d p 请求方法同名的这样一些装饰器,这样才能够告诉我们的 nest js 项目,我们这样一个 controller 类里面的哪一个方法对应着哪一个 h g d p 请求方法。所以呢,这里我们只需要用这个装饰器来对应就行了,不需要像刚才的 express 项目那样,还需要在我们的 route 里面去指定。可以看到我们之前的这个写法呢,我们是需要在 route 里面调用相应的这样一个和 hdp 请求方法同名的这样一些方法,才能和我们的 control 方法进行绑定的,这样的写法呢很明显是比较麻烦的,那么我们完全可以照猫画虎,尝试着去创建一个 to do ctrl, 那 么创建的过程呢?都要我们手动的去写吗?当然如果你觉得你对这一套流程不熟悉的话,你可以尝试去手动写,但是在我们的类似的这些项目中呢,它既然是针对企业级的项目,那么针对这个简单的重复工作,它肯定是做了一些优化的。所以呢,我们来到 nest 的 g s 的 官网,在 nest 的 g s 的 官网,我们找到 c l i, 找到 usage, 我 们之前一直使用的都是 nest new 这个命令,那我们今天要教大家的是这个 nest generate, 也就是生成,当然使用的时候呢,你可以指数一个 g, 也就是代表这个 generate, 那 我们可以生成哪些东西呢?在下面的 scalatic 这个地方,我们就能够找到它可以生成的所有的东西,可以看到可以生成 library class, 然后就有我们所需要的 controller, 还有什么呢?还有我们所需要的 service, 甚至呢还有 provider, module, 这些全部都是可以生成的。那我们就简单地来尝试用一下,打开我们的终端, nest g 就是 生成,后面呢跟上我们要生成的这样一个类型,我们要生成的是 controller, 那这个 controller 我 叫它 to do controller, 但是呢,写的时候呢,我们不能这么写,我们要 to do 就 直接这样写就可以了。回车 我们看一下会生成什么东西啊?它这里生成了一个 to do 文件夹,然后下面呢就有一个 to do 点 controller tes, 然后创建出来的类名呢,刚好就是我们想要的 to do controller, 同时呢它还会创建一个和我们的 to do controller 匹配的这样一个测试文件。那么每次创建的时候呢,不管你创建什么文件啊,它都是会默认创建相应的测试文件的,除了类文件之外,那如果我们想要在创建的时候不加上这样一个对应的测试文件的话呢?啊,很简单,我们在 这个命令的后面跟上 no spec, 这样的话,它就可以跳过创建这个测试文件的过程,我们把这个文件夹删掉,重新来创建一次 回车,同样的会创建一个 tt 文件夹,下面同样有一个 controller, 但是对应的测试文件它就消失了。那么有了这个 controller 之后呢,我们就可以很方便地实现相应的功能了。那首先呢,我们要写上相应的一些方法,这些方法呢,我们全部都从我们的 express 项目中去拿过来。我们来到 express 这里的 controllers, 我 们直接 复制。直接复制粘贴也不行啊,因为这里的这个函数呢,它不是写在内里面的,而我们的 nest js 里面的所有的方法函数,它要写在内里面。所以呢,稍微有一点不同啊,我们直接这样复制,然后呢,我们粘贴进去,进行一些修改,这里很明显报错了,是吧,我们把这里的 export function 给它选中,全部给它替换成空白。但是呢,可以看到,在我们的 controller 函数中间呢,它有访问一些来自 service 中间的一些函数内容。这些内容呢,我们还没有定义好,我们暂时先不管。但是 这里很明显有一个问题,就是我们这里在 express 中间所使用的这些 controller 函数,它的参数默认都是 request, 还有 response。 然而在我们的 nist 中,这里的 request 和 response 呢, 它到底是来自哪里的?它能不能这样写呢?在我们的 nest 中间呢,它是不推荐这样写的。我们来到 nest 的 just 的 官网来看一下。我们来到 overview, 来到 controllers 这里呢,我们直接往下面划,找到这里的第一个部分 routing, 可以 看到这里它所展示的第一个内容,这个 cat controller 中间它定义了一个 find order 这样一个方法, 这个方法呢,返回了一个字母串,可以看到,在它的这样一个路由处理器或者是一个 control 的 方法中呢,它没有写 request, 也没有写 response, 为什么它能够这样写呢?为什么它不需要像 express 那 样在参数列表中写一个 request 和 response 呢?那我们往下面滑,能够看到这个部分。 standard, 在 nest 的 js 中呢,它处理我们的 响应的部分呢?它有两个相应的内容,一个是叫做 standard, 一个是叫做 library specific, 那 么我们默认使用的就是 standard, 这个 standard 呢,是 nest 的 js 中默认的这样一个处理响应的方法。怎么个默认法呢?首先,它这里强调了 it will automatically be serialised to json。 如果我们返回的这个内容,它本身就是一个 javascript 的 对象或者是一个数值,那么 nest 的 js 它会自动地为我们 将它进行序列表,把它转换成一个 json 字串。我们之前的写法是怎样的呢?欸,可以看到,我们之前的写法是需要使用一个 request, 调用一个 json 函数,然后呢,才能够将 service 中间返回的这样一些数值或者是 对象,给它变成 json 格式的字串,才能够返回相应的响应给我们的前端。但是呢,在我们的 nest js, 在 nest js 中呢,我们返回的内容 如果是一个数组,那么它就会默认地处理成一个 json 格式的数据,不需要我们去调用这里的 response json, 所以呢,这里它的参数列表不需要 request, 也不需要 response, 所以呢,这里的 find all 我 们只需要给它加上一个装饰器 get 就 可以了。注意啊,这个装饰器它是想要像函数一样去调用的,因为装饰器本身在 text script 的 里面呢,它就是一个函数,那么下面的 find one 同样是一样 get, 下面的 create, 它应该就是 post, 注意啊,要导入一下,还有这里的 update, update 就是 patch, 最后还有我们的 delete, 那 么我们的 find all 它不需要这里的 response, 它直接返回这里的 find all to do 就 行了。然后这下面这个 find one find one 它是需要从我们的请求中这个 路径参数,也就是 pass parameter 中获取一个 id 的。 这个地方呢,在我们的 nest 的 js 中又怎么解决呢?回到我们的文档,在下面呢,它又讲了另一个东西,叫做 library specific, 也就是和我们具体用到的这样一些第三方库相关的这样一种处理请求和响应的方式。这以它告诉我们, 以这个 express 为例的话,如果我们真的必须要在我们的这个 controller 函数中使用 response 和 request 的 话呢,我们可以使用这样一种装饰器,叫做 r e s 或者是 r e q。 然后呢,这样我们的 nest js 它就会自动地注入一个 匹配 express 类型的这样一个 response 或者是 request。 然后呢,我们就可以像传统的 express 那 样,我们就可以像我们之前熟悉的那样,通过 express 的 方式呢,来使用这里的 response 和 request。 所以呢,我们完全可以在这里在这个 request 的 前面写上一个注解, request 后面的 response 呢,我们就不需要了,对吧?因为它会自动处理嘛,然后从这个 request 的 中间获取我们的 parameter, 然后后面这个 request 呢,我们可以导入对应的类型,这个类型呢,肯定是来自我们的 express, 好 注意啊,导入的时候呢,要加上这个 type 关键字啊,不然它是会报错的。此时呢,它的用法就和我们 express 中间的用法 完全没有任何区别,但说实话,这样做的话,看起来好像就像是在 ness 的 jess 中呢。退而求其次,去使用了和以前 express 那 样非常不方便的写法,有没有什么更好的方法能够直接在我们的参数列表中去获取对应这里的这个路径参数呢?当然是有的,我们往 下面找,找到这里的 route parameter。 那 么在 route parameter 中呢,这里就明确告诉我们,可以使用这样的方式,在我们的 定义这样一个对应的方法,它到底绑定哪一个? h g, d p 方法的这样一个注解,也就是比如这里的 get 注解,它就可以绑定它所对应的这样一个参数,它的名字啊,刚好我们这里也是 id 啊,我们复制一下 来到这里粘贴进去。然后呢,具体在参数列表中怎么去获取它呢?啊,就是这样,我们可以通过这样个 parameter 这样一个装饰器,直接获取我们请求中间的这样一些路径参数,而不需要通过我们的一个 request, 就 像这样,不需要通过先获取我们的请求体,再获取我们的参数。所以呢,这里我们直接这么写啊, prime 啊,这里自然就是 prime。 然后呢,我们直接从这个 prime 里面去结构得到一个 id 就 行了,它的写法后面还跟上了这个类型,定义是 any, 当然了,这样的写法呢,其实依然不是特别的优雅。我们还需要从我们的 pram 里面再次去获取它里面的参数,还中间需要中转一次,看起来和直接从 request 中获取 pram 再获取 id 好 像也没差太多,有没有什么更简单的方法啊?更简单的方法就在下面啊,我们可以在这个 pram 这样一个 装饰器里面呢,再加上我们要从这个路径参数中获取了这样一个参数,它的这个字段的名字。所以呢,我们在 prams 里面再写上 id, 对 应的这个就是 id, 那 它的类型呢?是 string ok, 那 此时呢,下面这个结构的部分呢,我们就不需要了,全部给它删掉,就这么简单。我们在 nest 的 机制中呢,不需要 request, 不需要 response, 所有处理我们的请求中间的参数还有响应的部分呢,全部都是自动的,只不过需要使用上对应的这样一些装置器。那我们的请求体这里的 body 我 们又该怎么获取呢?有没有相应的这个装置器呢?那么有,我们的 prime 自然就有 body。 我 们这里呢,直接来到上面的 request object, 也就是请求的对象在这里呢,它就明确地告诉我们在怎样获取里面的 body。 这里,它给出了非常多的这样一些装饰器,这里就刚好有我们所需要的这个 body。 通过这个叫做 body 装饰器呢,我们就可以直接从我们的 nest js 中间的函数中结构得到我们想要的这样一个 body 请求体。好,我们直接像刚才的 prompts 那 样去使用就可以了,所以呢,写上 body, 那 后面呢,跟上 body, 那 它的类型定义到底是怎样的呢?啊?这里就取决于我们请求过程中传进来的这个 body 它的这个结构了,我们看一下到底是怎样的。来到我们的 express 项目,我们来到这里的 create create, 它所对应调用的这样一个 service 方法叫做 create to do。 那 么传进来的内容呢?它是 要传给我们的 deduce 这样一个序组的,那么序组中每一个元素的结构,一个是 id, 一个是 title。 回到我们的 nest 的 jsome, 我 们参照这个结构给它写上对应的类型定义就行了。 id title 就 这么简单,那这里我们的 request 点 body 就 不需要了,直接把这个 body 传给我们的 create to do 好。 这里的 response json 同样也不需要 全部都给它删掉,还包括这个地方全部都不需要我们的 post 完成。那我们这里的 patch 呢,它需要 id, 那 做法呢?其实和上面这的 find one 其实是一样的,我们直接复制过来粘贴,然后它还需要一个 body, 所以呢,我们也复制过来 粘贴,把这两行给它删掉。这里的 response json 处理同样给它删掉,我们只需要传入相应的参数就行了,非常简单。这里的 delete 呢,它只需要一个 id, 所以 啊,我们张毛画虎复制 粘贴进来,这个 id 就 去掉。这里呢直接返回一个对象就行了,这里呢,同样返回一个对象, 但是呢,可以看到刚才我返回的这个内容中啊,我先要还原回来,我们在 express 这个项目中间,刚才我们返回的这个地方, 如果这里的删除的过程它失败了,这个返回的状态码我要给它设置成四百。那在我们的 nest js 中怎样设置我们响应体中间的这个响应码呢?我们先把这个多余的内容给它删掉,我们再去看怎么去设置它的响应码。回到我们的 文档,在右边找到这里的 status code, 那 么 status code 呢?可以看到它的做法呢,非常简单,如果是普通的想更改它默认的这样一些返回的成功的状态码,很简单,通过一个装饰器 h d d p code, 然后写上你想要定义它成功返回的响应的状态码就可以了。那相应的呢,我们也可以通过 刚才我所说的直接通过注解的方式获取到我们的 response, 然后呢,像 express 项目那样的,直接给我们的响应中间设定一下它的这个状态码。所以呢,这里有两个方式啊,很明显这里的 给它加注解的方式呢,不太适合,因为注解它只能修改它成功返回的这样一个响应码,我们这里要做的是动态的条件判断,删除成功它自然应该返回两百,而如果是失败的话,我想要它返回四百,那这个地方呢,我们就需要从我们的参数列表中去自动注入得到一个 response 对 象 response, 那 么它的类型自然也是 response 来自我们的 express ok, 然后呢,在这里通过我们的 response json, 同时呢在前面连接上我们的 status, 那 这里的状态码呢,我们就可以写为四百。但是这里我就要说一下,但是了, 在我们的应用中,给我们的状态码通过这样一个长量的方式,或者是这样一个印编码的方式给它写进去,本身呢,其实是不推荐的,通过这样的方式直接写一个固定的印编码的方式来给它写这个状态码,或者是其他的什么请求 或者是什么错误信息,包括这里的这些提示,其实我们都不应该直接写在 control 中,我们应该给它做一层封装,那这里我们的状态码我们 难道要自己给它封装一层吗?啊,其实不需要,在我们的 nest js 应用中呢,它单独给我们提供了提供了一个内置的一个美曲类。啊,我们使用 h d d p styles 啊,这是一个类似这次内置的一个美曲类导入,然后呢,它里面就可以挡住各种各样的和我们的状态码绑定的这样一些美曲类型,比如我们的状态码是四百,那么对应的就是 bad request, 我 们在鼠标扶上去看一下,它的值就是四百, 所以呢,这个地方不需要我们去手写对应的这个状态嘛,我们直接使用 h d d p status 这样一个 nest js 内置的一个工具库就行了,不需要我们去做额外的东西。那么到此呢,其实我们就已经成功地完成了从 express 到 nest js 中在 controller 层做的一些修改,那剩下的呢,就是我们要在 nest js 中呢去实现这里的 service 中间的内容啊。这个部分呢,我就作为一个作业吧,因为这个地方其实很简单,大家只需要参照一下我们的 这个自动生成的 app controller 中间如何去注入我们的 service, 然后呢,在我们的这样一个 to do service 中去实现我们缺失的这样一些内容就行了, 那么这些内容呢,大家全部都可以参照我在这里的 express 项目中所做的 to do service 中间的内容就行了,你们只需要把这些方法全部都放在一个 app service 类中,把前面的关键字删掉,然后呢,把这个本地变量给它加进去,就这么简单,这个地方我就不讲了。那么 到此呢,相信各位就大致了解了我们的 nest js 它到底好在哪个地方,它可以自动地为我们处理不同类型的这样一些响应,不管是单纯的返回文字,还是返回一个 json 格式的字不串,那都是自动为我们处理的,不需要像我们的 express 那 样的 去手动地调用。并且啊,还有一个最关键的一点,在我们的 express 项目中呢,它默认是不会去处理我们的请求响应题的,它默认是不会去处理这样一个 json 格式的内容的,所以呢,它需要加上这样一个中间键,而我们的 nest 的 js 中呢,它没有这一步,它不需要我们去加这个中间键。并且呢,可以看到,在我们的 express 项目中呢,我们还需要手动地将这个路由和我们的对应的请求进行绑定起来,而我们的 nest 的 js 中呢,它只需要通过注解就可以将我们的路由地址和我们的 这个 controller 函数进行绑定,也就是路由和 controller 是 一体的,而不像 express 那 样,我们的路由和 controller 是 分离的。那当然这个地方我们应该是差了一些东西啊,比如这里的 id, 比如这里的这个地方 id, 还有 delete, 这个地方 也是需要加这个参数的,剩下的这个 service 的 部分呢,就交由各位自己去实现了。那么以上就是本期视频的所有内容,希望你能关注或订阅我的频道,感谢你的观看,我们下期视频再见!

大家好,这节课我们讲解获取验证码图片和验证码哈希值的 api 接口。由于哈希值是不可逆的,所以就算截获验证码的哈希值也不会得到验证码, 想得到验证码只能通过图片来获得。关于验证码图片,大家可以自行设计,也可以从网上下载。下面我们开始开发验证码图片接口。进入开发工具,打开 server 下 a p i 下 user 文件夹, 新建 capture 文件夹, 将验证码图片拷入该文件夹。由于该接口需要一个随机数函数和一个生成哈希值的函数,打开 user 文件夹下的 geno 点 gs 文件。 一是生成随机数据的函数 get random int 有 两个参数,一个是最小值,一个是最大值。用 math 数学对象 random 函数生成小于等于一的随机数,乘以最大数,减去最小数,加一 取整后再加上最小数,就是符合要求的随机数了。二是对字母串加密,生成哈希值。 计算方法默认时 s h a 二五六。这次我们用浏览器的原声对象进行加密,比较老的浏览器不支持该方法通俗化一个编码器 include 等于 new text include, 并对要加密的自复串进行编码,然后用指定加密算法,这里默认是 s h a 杠二五六对编码的数据进行加密,这是个异步函数,返回一个 merri buffer 数值缓冲区, 将其转为五符号八位整数数组,再用 a r 数组的 from 函数转为普通数组,然后用 map 方法进行便利返回一个,将每项转成十六,进至两位字副串, 不足两位的前面加零,最后将其连接成字副串,返回保存关闭。 下面我们在 api 下 user 文件夹下新建 capture image, 点 g s 文件, 引入 f y d api, 引入 get random int, 获取随机函数和 encrypt string 加密字串函数,定义一个接口函数 us capture image。 首先定义一个数组,内容是每个验证码图片的验证码顺序是图片名中的数字抽象 f i d a p i 的 对象实历,取得一个一到十二之间的随机数, 用这个数减一,从数组中取得验证码,再用加密函数进行加密。在 then 方法取得哈希值后,尝试将随机数 i 指定的图片读入 image buffer 非共享缓冲区内,并转为 base 六四字符串, 与哈希值一同返回客户端,如果出错,则在控制台打印错误,然后返回错误,引入 f s 文件系统,这个接口就开发完成了。下面我们到工具箱中复制接口 url, 再到开发工具,打开 index, 点 gs 文件,添加这个接口。 我们打开 v w two box, 点 view 文件,删除下面没有渲染条件的 t b shade content 组键,去掉已有的四个组键的注视,保存到浏览器看一下, 可以显示验证码图片,并可以进行登录了。这节课就到这里,再见。