喵酱魔法师
IP:
31关注数
0粉丝数
26获得的赞
工作年
编辑资料
链接我:

创作·65

全部
问答
动态
项目
学习
专栏
喵酱魔法师

如何搭建具有DDNS功能的本地DNS服务器?

有几种方法和工具可以帮助你实现这一目标: 使用现成的开源工具: 1、ddns-go:这是一个用Go语言编写的开源DDNS工具,简单易用,适合家庭或小型企业网络。可参考"https://cloud.baidu.com/article/3048633" (https://link.segmentfault.com/?enc=MzUmV8yjDz3x0rz14FV0aw%3D%3D.%2BSAjr4tqX1ssb6bOZgu6gMpxoMlGU01eqbrF%2FpHcnRD1uLJRv0QBDAhtupwrOOUL) ArDNSPod:这是一个基于DNSPod API的Shell脚本,可以自动更新动态IP地址到DNSPod的域名解析中。可参考"https://blog.csdn.net/shandian534/article/details/129238433" (https://link.segmentfault.com/?enc=vvnxASOhQOH5ZnCk3GiBdA%3D%3D.zAEU%2Be2bBjT0fVA0wN%2FYpZKo8Iwtfg5zGZGLOXB6uUSpD7mybPWWD46Ib1yyKNaqvrDVKc%2FnaIWOsmgrCKiCfA%3D%3D) 2、自编DDNS程序: 你可以参考一些简单的DDNS脚本,例如使用Shell脚本调用DNS服务商的API来更新IP地址。这种方法灵活且可定制,但需要一定的编程基础。可参考"https://zhuanlan.zhihu.com/p/122617442?utm_id=0" (https://link.segmentfault.com/?enc=x65Zm5C%2Fh9kLvnhhgT7avA%3D%3D.T45UhS8%2B4%2B8%2BlcRplXZfT2qYsFlR1qf8jhZzH%2F7oyA8rUmntNgSkVAC5IjDHI4tt) 3、选择合适的DNS服务器软件: Bind:功能强大,适合大型网络,但配置相对复杂。 Dnsmasq:轻量级,配置简单,适合小型网络。 Windows Server DNS:与Active Directory集成较好,适合Windows环境。可参考"https://blog.csdn.net/song19891121/article/details/137449856" (https://link.segmentfault.com/?enc=uzYpNOIbnEd86RdddH8SnA%3D%3D.sQRJgNMDs%2B4MoEkInd%2B%2BQ7MAYwD7%2BIQ%2Bg6yIpxT6Lcs3c32Rgx8wmNnQ9LyE%2Fyr%2FmDlkFCh8ATvL%2Binn9p7n9Q%3D%3D) 4、配置步骤: 安装和配置DNS服务器:选择合适的软件并在你的设备上安装和配置。 设置DDNS功能:使用脚本或工具来实现动态IP地址的更新。 测试和验证:确保配置正确,测试域名解析功能。
0
0
0
浏览量0
喵酱魔法师

java新手在线求救?

package com.itheima.study1; import java.util.Random; import java.util.Scanner; public class day9_17_4 { public static void main(String[] args) { //生成中奖号码(6个红球,1个蓝球组成) int[] brr = createNumber(); int[] usersNumbers = userinPutNumber(); } //创建一个可以随机生成中将号码的方法 public static int[] createNumber() { //创建数组用于添加中奖号码 int[] arr = new int[7]; //随机生成号码,并添加到数组中 //红球,不可以重复(思路:将1到33进行打乱,并选取前6个进行抽取) Random random = new Random(); //建立红球数组 int[] redBowl = new int[33]; for (int i = 0; i = 1 && redNumbers = 1 && blueNumber <= 16) { usersNumber[usersNumber.length - 1] = blueNumber; i++; } else { System.out.println("请输入合法蓝色号码"); } } return usersNumber; } //建立方法判断用户的红球号码是否唯一不重复 public static boolean estimateUsers(int[] usersNumber, int redNumbers) { boolean estimateWords = false; for (int i = 0; i < usersNumber.length - 1;) { if (usersNumber[i] == redNumbers) { estimateWords = true; i++; } } return estimateWords; } } 这个代码录入完第一个数字之后之后,就没有然后了 不知道是哪里出了问题,请问怎么能让它继续运行
17
1
0
浏览量315
喵酱魔法师

uniapp 真机测试底部导航栏文字不显示问题如何解决?

我正在使用uniapp编写app,真机测试时底部导航栏设置的文字没有显示,但是在浏览器上是正常的。 { "pages": [ { "path": "pages/index/home", "style": { "navigationBarTitleText": "首页" } }, { "path": "pages/index/welcomepage", "style": { "navigationBarTitleText": "欢迎界面" } }, { "path": "pages/index/toolbar", "style": { "navigationBarTitleText": "工作台" } }, { "path": "pages/index/my", "style": { "navigationBarTitleText": "我的" } }, { "path": "pages/testview/inner2page", "style": { "navigationBarTitleText": "二级界面" } } ], "globalStyle": { "navigationBarTextStyle": "#000000", "navigationBarBackgroundColor": "#ff4000", "backgroundColor": "#ff4000" }, "tabBar":{ "selectedColor":"#ff4000", "color":"#ff4000", "list":[ { "pagePath":"pages/index/home", "text":"首页", "iconPath":"/static/home.png", "selectedIconPath":"/static/home2.png" }, { "pagePath":"pages/index/toolbar", "text":"工作台", "iconPath":"/static/toolbar.png", "selectedIconPath":"/static/toolbar2.png" }, { "pagePath":"pages/index/my", "text":"我的", "iconPath":"/static/my.png", "selectedIconPath":"/static/my2.png" } ] } } 浏览器效果: "图片.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20250121/5b840429f80744c558f5b70e6bfd6f8c.png) 真机效果: "图片.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20250121/8e45054145cc4e1480c6638472a7e2e4.png)
9
1
0
浏览量338
喵酱魔法师

C语言文件输出后多出好多0?

问题描述给的很详细,很棒!我把你的代码全部复制下来放到vs里跑了一遍,看到你在读取和保存药品信息时出现了问题。读取文件时,您使用了fscanf函数来解析每一行的数据并存储到你定义的med.medicine_array数组中,但是你并没有正确处理字符串结尾的空字符'\0',导致后续输出可能会出现意外的结果。(这是第一个bug) 然后,在保存药品信息到文件时,您使用了fprintf函数将药品信息写入文件,但是在格式化字符串中没有指定浮点数的精度,这可能导致输出的价格有多余的零。(这是第二个bug),好了,夜已深,授之以渔,也授之以鱼,我把代码给你按照我描述的修改了一下: #include #include #include #define MAX_SIZE 100 // 定义药品结构体 typedef struct { char drug_name[100]; int drug_code; float drug_price; int stock; } Medicine; // 定义药品库存结构体 typedef struct { int size; Medicine medicine_array[MAX_SIZE]; } MedicineInventory; // 从文件中读取药品信息 void read_medicine_file(MedicineInventory *med) { FILE *fp; char filename[] = "medicine.txt"; char line[200]; fp = fopen(filename, "r"); if (fp == NULL) { printf("无法打开文件:%s\n", filename); exit(1); } // 初始化药品库存大小为0 med->size = 0; // 使用一个临时变量来存储解析后的数据 Medicine temp_med; while (fgets(line, sizeof(line), fp)) { // 使用sscanf解析每一行的数据并存储到临时药品结构体中 sscanf(line, "%[^,],%d,%f,%d", temp_med.drug_name, &temp_med.drug_code, &temp_med.drug_price, &temp_med.stock); // 给药品名称字符串末尾添加空字符'\0',以确保它是一个有效的C字符串 temp_med.drug_name[strlen(temp_med.drug_name)] = '\0'; // 将临时药品结构体的数据复制到药品库存结构体数组中 med->medicine_array[med->size] = temp_med; // 更新药品库存大小 med->size++; } fclose(fp); } // 显示药品信息 void show_medicine(MedicineInventory med) { int i; printf("药品名称\t\t\t药品编码\t\t药品价格\t\t库存\n"); printf("----------------------------------------------------------\n"); for (i = 0; i < med.size; i++) { // 使用%.2f作为格式字符串来打印价格,限制小数位数为两位 printf("%s\t\t\t%d\t\t\t%.2f\t\t\t%d\n", med.medicine_array[i].drug_name, med.medicine_array[i].drug_code, med.medicine_array[i].drug_price, med.medicine_array[i].stock); } } int main() { MedicineInventory med; read_medicine_file(&med); show_medicine(med); return 0; } 希望可以帮到你
0
0
0
浏览量0
喵酱魔法师

后端敏感操作如何验证合法性?如何防止抓包模拟请求?

可以接口加签名,比如你参数是 { "data": { 'parama' : 'test' } } 可以自己写个算法,然后用一套规则,比如像接入支付宝那种,把所有的参数连起来处理一下,就变成 { "data": { 'parama' : 'test', 'sign': 'xxxxxxxx' } } 多一个签名以后的sign,服务端收到的时候,先校验这个sign是不是合法的,是的话说明没人改你的参数,不对的就丢弃就好了。
0
0
0
浏览量0
喵酱魔法师

element的MessageBox和Dialog是不是可以互换使用?

我看MessageBox里也可以添加Vnode,那是不是意味着我也可以在message属性里渲染自定义组件,所以有什么场景是只能Dialog做,MessageBox做不了的吗?
9
1
0
浏览量351
喵酱魔法师

golong有什么好用的读取word开源库吗?

"https://github.com/go-ole/go-ole" (https://link.segmentfault.com/?enc=SSerQ9ekTN5XSFPtFcri3w%3D%3D.OwExFb6QmlkSw2Jv4lE4Zl1a%2FPldqrrfSEXdQdIxATFfNMCWbrZFkJFfsGJkKF5i) "https://github.com/unidoc/unioffice" (https://link.segmentfault.com/?enc=fNBOKl9gxL0vXvV02GaHyQ%3D%3D.8RtnJk8AjjKiX2nCRL5Zg31pXJAa7Erzi%2BN8iTZ5pPzFdS4zXhEM7PJxu%2B18YlRy)
0
0
0
浏览量0
喵酱魔法师

如何自定义仪表图的刻度值?

vchart 是对 echarts 的封装,可以传入原始字段 "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250101/a26cd1032af4d69de170cf97dff50db2.png)
0
0
0
浏览量0
喵酱魔法师

知乎问答里面的禁止转载是怎么实现的?

知乎问答里面有些回答可以复制有些回答不可以复制,这是怎么实现的? 在回答的元素上没有看到什么明显特殊的id或是class进行标识。 "https://www.zhihu.com/question/621666836" (https://link.segmentfault.com/?enc=rjw1%2BmugFmRPC3g744MN%2BQ%3D%3D.hf%2F34jllAh6s%2BCm1%2BsLpen50%2FsEbeUYmEPzO0hPYcYIr17iVnGrOGhLkG%2FJ5AEh6)
14
1
0
浏览量315
喵酱魔法师

html中Ctrl+滚轮时想禁用放大和缩小事件,怎样禁用?

很容易找到 1.pc端,原生 document.addEventListener('mousewheel', function (e) { e = e || window.event; if ((e.wheelDelta && event.ctrlKey) || e.detail) { event.preventDefault(); } }, { capture: false, passive: false}); document.addEventListener('keydown', function (event) { if ((event.ctrlKey === true || event.metaKey === true) && (event.keyCode === 61 || event.keyCode === 107 || event.keyCode === 173 || event.keyCode === 109 || event.keyCode === 187 || event.keyCode === 189)) { event.preventDefault(); } }, false); 2.vue 页面 methods: { keepRatio () { var ratio = 0; // 定义一个缩放比例 var screen = window.screen; // 获取窗口对象 var ua = navigator.userAgent.toLowerCase(); if (window.devicePixelRatio !== undefined) { ratio = window.devicePixelRatio; // 像素大小的比例 } else if (ua.indexOf('msie')) { if (screen.deviceXDPI && screen.logicalXDPI) { ratio = screen.deviceXDPI / screen.logicalXDPI; } } else if (window.outerWidth !== undefined && window.innerWidth !== undefined) { ratio = window.outerWidth / window.innerWidth; // 外部比例/内部比例:缩放比例 } if (ratio) {ratio = Math.round(ratio * 100)} this.ratio = (ratio / 100).toFixed(2); document.body.style.zoom = 1 / this.ratio; // 窗口视图除以缩放比例:即缩放还原 } } mounted () { this.keepRatio() window.addEventListener('resize', () => {//监听窗口缩放 this.keepRatio() }); }
0
0
0
浏览量0
喵酱魔法师

由于redis加锁需要时间,导致在加锁的时候已经有多个请求打过来了,请教一下有什么好的方法去限制吗?

没看懂限制什么内容。 redis加锁只有成功失败两个状态,同一时间锁只会由一个持有者。持有者才有权限访问,未持有者能够访问就是你的业务代码写的有问题的。 循环读锁直到超时或者成功,成功后才可以访问。
0
0
0
浏览量0
喵酱魔法师

忘记密码提示这个怎么弄?

这个报错是找不到amh_user表了,是数据表损坏了还是什么,去数据库确认看。 如果表有问题,重新创建回来, CREATE TABLE IF NOT EXISTS `amh_user` ( `user_id` int(10) NOT NULL AUTO_INCREMENT, `user_name` varchar(15) NOT NULL, `user_password` varchar(32) NOT NULL, `user_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
0
0
0
浏览量0
喵酱魔法师

angular项目在第三方包源码增加东西比如echarts后,打包上传怎么让对方拉下来也同样有?

具体怎么解决
6
1
0
浏览量288
喵酱魔法师

docker 的 python sdk 如何计算docker 容器的 res 内存使用量?

docker stats 是怎么算出来的,我倒是知道了,参考:"docker stats Description" (https://link.segmentfault.com/?enc=az6KlnBvulIMT7Qzyl7sFQ%3D%3D.xStRthia49BmUzThN1Cako6lllDKZOTXSrR7yZDRGnPjwGJfvxisJVWX7OoV9k7zy5H%2FAWH2UqsbzeV01E%2BvZph0edOCpHGRkKuGQHIyyPY%3D) «On Linux, the Docker CLI reports memory usage by subtracting cache usage from the total memory usage. The API does not perform such a calculation but rather provides the total memory usage and the amount from the cache so that clients can use the data as needed. The cache usage is defined as the value of "total_inactive_file" field in the "memory.stat" file on cgroup v1 hosts. 在 Linux 上,Docker CLI 通过从总内存使用量中减去缓存使用量来报告内存使用量。 API 不执行此类计算,而是提供总内存使用量和缓存量,以便客户端可以根据需要使用数据。缓存使用情况定义为 cgroup v1 主机上 "memory.stat" 文件中 "total_inactive_file" 字段的值。On Docker 19.03 and older, the cache usage was defined as the value of "cache" field. On cgroup v2 hosts, the cache usage is defined as the value of "inactive_file" field. 在 Docker 19.03 及更早版本中,缓存使用情况定义为 "cache" 字段的值。在 cgroup v2 主机上,缓存使用情况定义为 "inactive_file" 字段的值。» 因为我的主机是 cgroupv2 的,所以要想和 docker stats 一样,那就要 usage 减去 inactive_file float(container_stats['memory_stats']['usage'])-float(container_stats['memory_stats']['stats']['inactive_file']) *** 至于第二个问题「问题二:为什么 htop 和 docker stats 的结果不一样」,我还得研究研究
0
0
0
浏览量0
喵酱魔法师

如何让图例标题和图例在同一行左右分开显示?

legend: { data: ['Email', 'Union Ads', 'Video Ads', 'Direct', 'Search Engine'], orient: 'vertical', align: 'right', formatter: [ '{name|{name}}', ].join('\n'), textStyle: { width: 200, rich: { name: { align: 'left' } } } } "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241216/ec41617efbc3f7b65fbeee4bdee2336a.png) 使用echart
0
0
0
浏览量0
喵酱魔法师

表格列宽怎么可以根据数据列数来展示不同效果?

在使用VTable表格库做报表数据展示时,如果列的总数不足以撑开整个容器的宽度,我想能自动拉宽来适应容器大小,但当列的数量较多总宽度大于容器宽度时,又可以正常出滚动条来横向滚动。这个效果怎么实现呢?
0
1
0
浏览量18
喵酱魔法师

请问script上的name是用来干什么的?

原生script标签没有name属性,这里可能是给组件设置组件名,vue3 setup模式设置组件名不像vue2那么方便 "https://www.cnblogs.com/liujunhang/p/17008927.html" (https://link.segmentfault.com/?enc=hIFm94yEU2x4MqMgRFB0dA%3D%3D.nPYlYu5oRVn%2FnWpAsnY9pBCRi1LXw9RlhoX3%2F%2FiZN23xkdMd2PDc3LEi7diQ%2Fpl5dp%2BaRwiMt31RW0kcepdVnw%3D%3D)
0
0
0
浏览量0
喵酱魔法师

在cmd里, 如何在调用.exe前先自动执行.bat?

具体比如, 我在使用开源命令行工具bbdown下载b站视频, 一个合法命令比如, "bbdown --config-file C:\Users\test\mv.config --help". 为了方便快捷传入不同的配置文件, 我参照chatgpt回答写了一个bbdown.bat, 主要就是先做一个cd然后再调用bbdown.exe, 这样一来就可改用命令"bbdown.bat --config-file mv.config --help", 即简化了对配置文件路径的传入. @echo off cd "%~dp0" bbdown %* 但这样键入时, 需要在进入bbdown之后多按一下tab, 才能使之补全为bbdown.bat, 多少还是有点麻烦. 所以请问有没有什么方法能让我在直接调用bbdown.exe时候, 自动先执行bbdown.bat? chatgpt回答用autocmd, 但这就超出我浅显的能力范围了. ps. 我能想到的另一种间接实现方式是把环境变量pathext里面的.bat和.exe调换顺序, 但不清楚这样做有没有什么坏处. 或者是把bbdown.bat改名为mybbdown.bat之类的, 然后即可只键入"mybbdown...", 但还是想知道有没有更优雅的解决方案. 感谢. *** 再次查询chatgpt, 又看到一个看起来靠谱但试验后无效的方案。把.bat改成.cmd就可以先于bbdown.exe自动执行: 当在终端里输入bbdown.exe时,Windows会先在bbdown.exe所在的目录下寻找是否有同名的.cmd文件。如果有,那么Windows会优先执行这个.cmd文件,然后再执行bbdown.exe。这样就相当于在调用bbdown.exe之前自动执行了你的批处理文件。
0
1
0
浏览量17
喵酱魔法师

前端有没有依赖实现下图的效果呢?

这就是一个时间面板,然后内容用 slot 插槽就行。 常用的组件库 elementui、vant、antd 都有 calendar 组件 "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241209/1122c3d1bf868b4a41ef2fc9803d0284.png)
0
0
0
浏览量0
喵酱魔法师

这种轮播图怎么实现呢?

Demo: "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241208/6e430965eb3e9950d49c7967bf09cebb.png) 在根据需要改一下就好了 {{ lastData }} {{ nowData }} {{ nextData }} export default { name: 'HelloWorld', data() { return { scrollList: [ "11111111", "22222222222", "3333333333", "4444444444444", "555555555", "6666666666", "7777777777777", "888888888888" ], top: "", scrollIndex: 0, p: "", lastData: "", nowData: "", nextData: "" } }, mounted() { this.goScroll() //监听鼠标滚动事件 window.addEventListener('mousewheel', this.mouseWheelScroll); }, methods: { goScroll() { clearInterval(this.p); this.setData(this.scrollIndex); this.continueScroll(); this.p = setInterval(() => { this.setData(this.scrollIndex); this.continueScroll(); }, 1000); }, //给文字滚动赋值 setData(_index) { var lastIndex = _index == 0 ? this.scrollList.length - 1 : _index - 1; this.lastData = this.scrollList[lastIndex]; this.nowData = this.scrollList[_index]; var nextIndex = _index == this.scrollList.length - 1 ? 0 : _index + 1; this.nextData = this.scrollList[nextIndex]; }, //滚动下标处理 每次加一 continueScroll() { var _index = this.scrollIndex; var nextIndex = _index img { width: 30px; height: 30px; border-radius: 50%; vertical-align: middle; margin-right: 20px } ul { position: relative; color: #ff4d51; } li { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; width: 80%; height: 60px; line-height: 60px; text-align: left; margin: 0; font-size: 14px } .scroll { height: 180px; overflow: hidden; font-size: 0px; position: relative; text-align-last: center; width: 300px; margin: 0 auto; } .transition { transition: top 0.5s } .lastDataStyle { color: dimgrey; transform: rotateX(45deg); } .nowDataStyle { color: #0000FE; font-weight: bold; font-size: 20px; } .nextDataStyle { color: dimgrey; transform: rotateX(-45deg); } «"https://blog.csdn.net/qq_35131811/article/details/123278565" (https://link.segmentfault.com/?enc=O6HI%2BJKEosj6KW4yhgunUQ%3D%3D.z0Sjg6314Ev2TtA24lQfbiEZuuRGYzt%2FahEaUVfO0d%2FU%2Fki0Lk2%2F0wdlHycQHG4YLE7nZ2QmgeXJAzpnCDUXrQ%3D%3D)»
0
0
0
浏览量0
喵酱魔法师

怎么构建一个QApplication实例,项目启动时先让他先运行起来,但是不显示任何窗口,然后能通过websocket发的请求参数调用,可以多次重复显示不同窗口?

class MyApp(QApplication): instance = None @staticmethod def getInstance(): if MyApp.instance is None: MyApp.instance = MyApp(sys.argv) return MyApp.instance class WindowManager(QObject): def __init__(self): super().__init__() self.currentWindow = None @Slot(str) def handleRequest(self, requestType, app, **kwargs): if requestType == "idcard": self.currentWindow = IdCardView() elif requestType == "keypad": self.currentWindow = KeyPadView(kwargs.get("flag")) elif requestType == "financeIcCard": self.currentWindow = FinanceIcCardView() elif requestType == "mockMagnetIC": self.currentWindow = MagneticView() self.currentWindow.ui.show() app.exec() return self.currentWindow.getData() def run_app(windowType, **kwargs): app = MyApp.getInstance() windowManager = WindowManager() return windowManager.handleRequest(windowType, app, flag=kwargs.get("flag")) 想通过run()方法传入不同的参数,根据参数调用对应的窗口且返回数据,但是这里会阻塞,请问这个可以怎么改造
0
1
0
浏览量12
喵酱魔法师

这种根据录音时分贝大小实时展现波浪大小的效果如何实现?

"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241208/d9fd0defe1fc5d6ba50f98a8b516d351.png) 如上图左边那个图形的波浪效果,这个是evc录频那里截来的效果。现在做好录音基本功能,就想在录音时加个动画效果。 现有代码如下: 录音 {{ time }} 开始录音 暂停录音 恢复录音 结束录音 下载录音文件 export default { components: { }, data() { return { mediaRecorder: '',//MediaRecorder对象实例 time: '00:00', timer: null,//定时器 startBtn: false, stopBtn: true, resumeBtn: true, endBtn: true, lastTime: '',//上一次暂停的时间 file: ''//录音完成的File文件对象 } }, computed: { }, created() { }, mounted() { }, methods: { // 开始录音 startRecord() { this.startBtn = true this.stopBtn = false this.endBtn = false //只录制音频 navigator.mediaDevices.getUserMedia({ audio: true }).then((stream) => { console.log('音频流', stream) //创建一个MediaRecorder对象实例,以供音频的录入 this.mediaRecorder = new MediaRecorder(stream) console.log('录音对象', this.mediaRecorder) this.mediaRecorder.start() //开始录音 this.mediaRecorder.onstart = () => { // 录音开始计时 const start = Date.now(); this.timer = setInterval(() => { const diff = Date.now() - start; const minutes = Math.floor(diff / (1000 * 60)); const seconds = Math.floor((diff % (1000 * 60)) / 1000); // const milliseconds = Math.floor((diff % 1000) / 10);//毫秒去掉 this.time = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; }, 10); } }).catch((error) => { console.log(error) this.$alert('开启麦克风失败!') }) }, //结束录音 endRecord() { this.startBtn = false this.stopBtn = true this.resumeBtn = true this.endBtn = true this.mediaRecorder.stop() this.mediaRecorder.onstop = () => { //录音结束 clearInterval(this.timer); //重置时间 this.time = '00:00' } //监听是否新的录音对象生成 this.mediaRecorder.addEventListener('dataavailable', (event) => { //监听录音结束后将录制的音频放入audio标签 this.$refs.recordPlayer.src = URL.createObjectURL(event.data) let blob = event.data//blob对象 console.log(blob) console.log(blob.size) let size = blob.size / 1024 / 1024 console.log('blob文件大小', size) //blob对象转file文件对象 let file = new File([blob], '录音文件1', { type: "audio/mp3" }) this.file = file console.log(file) }) }, //暂停录音 stopRecord() { this.stopBtn = true this.resumeBtn = false this.mediaRecorder.pause() this.mediaRecorder.onpause = () => { //暂停录音,停止当前计时 clearInterval(this.timer); this.lastTime = this.time } }, //恢复录音 reRecord() { this.resumeBtn = true this.stopBtn = false this.mediaRecorder.resume() this.mediaRecorder.onresume = () => { //恢复录音,恢复当前计时 const start = Date.now(); this.timer = setInterval(() => { const diff = Date.now() - start; const minutes = Math.floor(diff / (1000 * 60)); const seconds = Math.floor((diff % (1000 * 60)) / 1000); // const milliseconds = Math.floor((diff % 1000) / 10);//毫秒去掉 let time = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; let lastTime = this.lastTime let [ah, al] = lastTime.split(':'); let [bh, bl] = time.split(':'); // Convert hour and minute to numbers let ahour = parseInt(ah); let almin = parseInt(al); let bhour = parseInt(bh); let bmin = parseInt(bl); // Add minutes to get total minutes let totalMin = (ahour * 60 + almin) + (bhour * 60 + bmin); // Convert total minutes back to hours and minutes let totalHours = Math.floor(totalMin / 60); let totalMins = totalMin % 60; // Store the result this.time = `${totalHours.toString().padStart(2, '0')}:${totalMins.toString().padStart(2, '0')}`; }, 10); } }, //下载录音文件 download() { // 创建a标签 var link = document.createElement("a"); link.href = URL.createObjectURL(this.file); link.download = "录音文件1.mp3"; // 添加到DOM中并模拟点击下载 document.body.appendChild(link); link.click(); // 从DOM中移除a标签 document.body.removeChild(link); } }, }
0
1
0
浏览量16
喵酱魔法师

JS,VUE3有什么能实现族谱图效果的插件吗(展开折叠按钮可以不要)?

"reactflow" (https://link.segmentfault.com/?enc=0MSc5iTK3hh8oNedsQUSsw%3D%3D.JvrE79iFFJcTkizjEgMPTUILgaaYsDZbVIOerRBn4S4%3D)
0
0
0
浏览量0
喵酱魔法师

Vue3 传值哪种会更好更快?

第一种方式: "App.vue" import NavTree from "@/components/NavTree.vue"; import {ref} from "vue"; const ids = ref([1,2,3,4,5,6]); provide('ids', ids); // 这个 navs 有好几百个 const navs = ref([ { id: 1, parent_id: 0, name: '名称1', children: [ { id: 2, parent_id: 1, name: '名称2', children: [ // ... ] } ] } // ... ]); "NavTree.vue" import {getCurrentInstance} from "vue"; defineProps(['navs']); const {proxy} = getCurrentInstance(); const nav_ids = proxy.$route.meta.nav_ids; const ids = inject('ids'); {{val.name}} {{ids}} {{nav_ids}} 第二种方式: "App.vue" import NavTree from "@/components/NavTree.vue"; import {ref} from "vue"; const ids = ref([1,2,3,4,5,6]); // 这个 navs 有好几百个 const navs = ref([ { id: 1, parent_id: 0, name: '名称1', children: [ { id: 2, parent_id: 1, name: '名称2', children: [ // ... ] } ] } // ... ]); "NavTree.vue" defineProps(['navs', 'ids', 'nav_ids']); {{val.name}} {{ids}} {{nav_ids}} 上面这两个种 "ids" 和 "nav_ids" 传值, 哪种传值会更快,还是说都一样,如果 "navs" 很多的时候
0
1
0
浏览量10
喵酱魔法师

PHP7.1废弃加密方法替换方案: mcrypt_encrypt VS openssl_encrypt 遇到的问题?

前人挖坑,后人遭殃。 1、源代码里面用的 "MCRYPT_RIJNDAEL_128" 让人第一感觉,是 "AES-128",而提供的 "key" 的长度是32 字符,经过 base64_decode 后,为 24 字符,也就是实际对应的应该是 "AES-192"。 2、原文里面还添加了个 IV 的处理,而 ECB 是不支持 IV 的。 看起来是 mcrypt 会根据密钥长度自行选定加密长度算法,也就是自动选择了 "AES-192-ECB",而 OpenSSL 则始终遵守了传第加密算法,将原本 24 字符长度的 key ,截断成了 "AES-128" 所需要的 16 位,所以不一致,如果你把传递给 mcrypt 的密钥长度裁剪成 16 位,你就会发现他们的加密结果也一样了。 而这里肯定是为了兼容之前的代码,所以这里要改的就是把 "AES-128-ECB" 改为 "AES-192-ECB" 就好了。
0
0
0
浏览量0
喵酱魔法师

怎么编写支持灵活过滤的列表接口,解析前端过滤表达式?

一个列表接口需要支持灵活且复杂的过滤条件一般都是怎么实现的? 我目前的想法是,前端通过过滤组件,生成一个过滤表达式,如查询价格小于100,且列别为tools或者 toolbox 的项目,则表达式为 "price <= 100 and category in ['tool', 'toolkit']"。 我目前使用go开发后端接口,我找到一个表达式库 "https://github.com/antonmedv/expr" (https://link.segmentfault.com/?enc=yEj4FKQ2QgGDDCYSmbB9gA%3D%3D.NRTmVFVNYTxdLzVOdKJwjlol8oGeA62%2FS9G1aYeDR5u5LOIybJWySyPMMcBzcqSr),但是不知道该怎么将表达式转为SQL查询,数据库查询我使用的是 GORM。 这个库可以直接计算表达式的结果,但是这和我的需求不符合,我需要将表达式转为通过GORM的SQL查询,然后我尝试了通过这个库的ast 和 sqlbuilder 手动解析并转换成 SQL 查询,但是没有成功,有些复杂一点或者嵌套条件,我不知道怎么解析语法树。 有人有类似的需求么,请问都是怎么实现的? 类似的功能我在 jira 的查询中也见过,但是不知道他们是怎么实现的。 谢谢! *** 更新:我找到Jira的文档了,我就是想要这种效果,客户端可以通过一个Query表达式来查询,这个表达式可以通过搜索空间生成,也可以让用户自己编写,之所以要使用这种方式,而不是直接让用户写SQL,一是为了安全, 而是要和后端数据库解偶。 "https://support.atlassian.com/jira-service-management-cloud/d..." (https://link.segmentfault.com/?enc=gxcYQgTtwE5kryNcwJsW%2Bg%3D%3D.Hh0KePqodFt%2FaDo4ZtjIJy89NDVkWMhDcalsDZWgJK87Nigiis%2BNtFEmwnejAJQYeYXo%2FQfcoFNUdWYJi3ZjpimDoiSQ9%2F%2BVa2JItumY5umXrFNL6C90g%2BjH35izdQfrj7kKkC16Dt8%2FEzlSQuJE6AATEH56%2FIyE2Z0hpidJoCw%3D) 目前的难点是,我不知道怎么解析这种表达式,"https://github.com/antonmedv/expr" (https://link.segmentfault.com/?enc=aD8sk5XswvAjcTS7d%2BT5Yw%3D%3D.azoSJ1MSoBnU3%2FQODmDpDfm673YjbAFg6W7wiYE93T4LUe1wmSkZoT%2BD1%2BrjReGH) 基本上可以满足需求,但是需要自己解析AST到SQL,另外就是无法扩展语法, 如果大家实现过有类似的需求,可以给我参考参考哈,谢谢
0
1
0
浏览量10
喵酱魔法师

为什么promise.then 和 promise.catch 捕获错误的顺序不一样?

执行顺序应该是这样的,先执行 then 方法里面的错误,如果有捕获,错误不会继续向下传递。否则才进入 catch
0
0
0
浏览量0
喵酱魔法师

Java怎么调用Excel中的各种公式?

1. 创建一个Excel文件,新建一个hiddenSheet工作表,创建名称/公式都行 "图片" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241112/e543f5f86e92336a29446b23eae98c38.png) 2. 在某个单元格内定义这个公式/名称 "图片" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241112/a140b4ec963d0f6d57d0786224a622e1.png) 3. Java代码中读取: //HttpServletResponse response对象是服务器自动创建的对象,用于响应前端的请求 outputStream = response.getOutputStream(); InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream(templateName); if (resourceAsStream == null) { return; } response.setContentType("application/vnd.ms-excel;charset=utf-8"); excelExport.attach(resourceAsStream, templateName); /*将下拉框中内容放到隐藏sheet中*/ excelExport.renderRange("hiddenSheet", "classList", classList);
0
0
0
浏览量0
喵酱魔法师

echarts如何实现瀑布图?

"http://echarts.zhangmuchen.top/#/detail?cid=xBJ8YycLzM" (https://link.segmentfault.com/?enc=zHw%2Fu4DyXSUrkRrE0TMe5g%3D%3D.o2PfNK3PUdY45l49kyU471t7Ojm8A9h2VNptkOIJginEGu2f72LVaQMMCrCiiUKVOudb1NgWEK9g3E8o9f5%2BIw%3D%3D)
0
0
0
浏览量0
喵酱魔法师

用户行为跟踪:第三方工具与直接服务器记录的比较?

就你提到的这个需求而言,直接分析 nginx 的访问日志不更简单吗。 使用第三方分析工具,主要在于开箱即用,而且,也不仅仅是抓取了 URL,还抓取了一些其他跟用户相关的数据。 比如 "百度统计" (https://link.segmentfault.com/?enc=SDK%2BJTTok9%2F6vk%2FrUaBndQ%3D%3D.CCj76MT91DsRdmffo2r0bF1h2JFGGDRnwYeyGdEJPPj%2BehaT%2BAK4CoKKtB6V3%2F4q1Q0f6CW7pKVXSXavXDl52Q%3D%3D) 的这个演示 demo 中,你提到的就仅仅是他这个平台中【受访页面】这一个功能。 就看你自己取舍了。
0
0
0
浏览量0
喵酱魔法师

WPF程序,如何程序只能在被授权的计算机上运行?

WPF程序,想让程序只能在被授权的计算机上运行?程序被复制到其他计算机上时将无法运行。如何进行计算机授权 有哪些成熟的方案?
0
1
0
浏览量16
喵酱魔法师

validateField is not a function?

elementplus表单效验,报错显示formDateRef.value.validateField is not a function 个人云盘 获取验证码 请从垃圾箱中查找验证码 未收到邮箱验证码? 记住我 忘记密码 没有账号 去登录? 去登录? 登录 注册 重置密码 {{ formDate.email }} import{ ref, reactive , getCurrentInstance ,nextTick}from "vue" const {proxy} =getCurrentInstance(); const api={ checkCodeUrl: "/api/checkCode", }; //操作类型:0:注册;1:登录;2:重置密码 const opType=ref(1); const showPanel=(type) =>{ opType.value=type; }; const fromData =ref({}); const formDateRef=ref(); const rules ={ email: [{required: true,message:"请输入正确的邮箱"}], }; const checkCodeUrl=ref(api.checkCode); const changeChekCode =(type)=>{ checkCodeUrl.value= api.checkCode + "?type="+type+"&time="+new Date().getTime; }; //发送邮箱验证码 const formData4SendMailCode = ref({}); const formData4SendMailCodeRef = ref(); const dialogConfig4SendMailCode = reactive({ show: false, title: "发送邮箱验证码", buttons: [ { type: "primary", text: "发送验证码", click: (e) => { submitForm(); }, }, ], }); const getEmailCode=()=>{ formDateRef.value.validateField("email" , (valid) => { if(!valid){ return; } dialogConfig4SendMailCode.show = true; }); }; export default { data() { return { videoCanPlay: false, //控制视屏加载状态显示图片 fixStyle: '' //屏幕发生变化时给播放器设置的样式 } }, mounted() { this.getVideoStyle() }, methods: { //视屏播放失败展示背景图片 canplay() { this.videoCanPlay = true }, //监听屏幕大小实时给播放器设置宽高 getVideoStyle() { window.onresize = () => { const windowWidth = document.body.clientWidth const windowHeight = document.body.clientHeight const windowAspectRatio = windowHeight / windowWidth console.log(windowWidth, windowHeight, windowAspectRatio, '屏幕实时大小') let videoWidth let videoHeight if (windowAspectRatio .login-body { height: calc(100vh); background-size: cover; display: flex; .login-panel{ width: 430px; margin-right: 15%; margin-top: calc((100vh - 500px)/2); .login-register{ position: fixed; top: 50%; left: 50%; transform: translate(-50%,-50%); background: rgba(255,255,255,0.3); border-radius: 5px; margin-top: 10px; padding: 25px; .login-title{ text-align: center; font-size: 18px; font-weight: bold; margin-bottom: 20px; color: #0b1017; } .send-emali-panel{ display: flex; width: 100%; justify-content: space-between; .send-mail-btn{ margin-left: 5px; } } .rememberme-panel{ width: 100%; color:#007fff; } .no-account{ width:100%; display: flex; justify-content: space-between; } .op-btn{ width: 100%; } } } .check-code-panel{ width: 60%; display: flex; .check-code{ margin-left: 5px; cursor: pointer; } } .login-btn-qq{ margin-top: 20px; text-align: center; display: flex; align-items: center; justify-content: center; img{ cursor: pointer; margin-left: 30px; width: 20px; } } .login-page { background-size: cover; background-attachment: scroll; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; } .login-background { width: 100%; display: block; position: fixed; top: 0; height: 100%; left: 0; z-index: -99; } .login-content { width: 640px; height: 780px; z-index: 2; left: 600px; top: 230px; border-width: 0px; background: rgba(0, 0, 0, 0.3); backdrop-filter: blur(2px); border-radius: 2px; border: none; box-shadow: none; color: #ffffff; display: flex; justify-content: center; align-items: center; } .videoContainer { position: fixed; width: 100%; height: 100%; overflow: hidden; z-index: -100; } .videoContainer:before { content: ''; position: absolute; width: 100%; height: 100%; display: block; z-index: -1; top: 0; left: 0; background: rgba(25, 29, 34, 0.65); } .fillWidth { width: 100%; } } 解决https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241107/2ff74163abb9a378c70348ea8b0ad762.png
0
1
0
浏览量13
喵酱魔法师

Three.js 渲染模型时的透光问题怎么解决?

法向量反了,导致只能从里面看到。 解决方法1:将材质改为双面,即设置material的side为THREE.DoubleSide 解决方法2:将法向量改正确,一般来说修改顶点顺序即可
0
0
0
浏览量0
喵酱魔法师

浏览器的navigator对象的数据有时候不一样,为啥?

浏览器提供的某些功能接口,比如硬件、陀螺仪、WebRTC 等,出于安全考虑,只对使用 https 协议的网页可见,对 http 协议的网页不可见。 但有一个例外,那就是 "localhost"。因为离开了 "localhost" ,网页开发者每次调试都要把代码更新到服务器上(或者在浏览器安装自签名的证书),比较麻烦,所以 "http://localhost" 访问的网页,其脚本可以访问这些接口。 你所见到的现象,应该是以上原因所致。 使用 "vue"启动的项目,习惯上访问的是 "localhost",换成 IP 访问应该就见不到了。
0
0
0
浏览量0
喵酱魔法师

java打包成可执行jar时出现NoClassDefFoundError?

切换到JDK1.8版本就可以,一开始的用JDK20,应该是在高版本的JDK中java.xml.transform包已经不支持了。
0
0
0
浏览量0
喵酱魔法师

如何使垂直滚动条出现在某个元素a上,从而使a的某个祖先元素b不再出现滚动条?

1. 给 a 设置 "max-height" 和 "overflow:auto" 2. 确保 a 的高度 <= b 的高度 3. 为了保险,可以给 b "overflow:hidden"
0
0
0
浏览量0
喵酱魔法师

puppeteer生成pdf与网页显示为什么不一致?

原因不详!! 解决办法: 修改.w-v的宽度为272,就不会出现该问题,但是与想要的宽度效果就不一致了(有毒😓) "image.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241030/1dab32508c478db4bafa6b0b46afa87b.png)
0
0
0
浏览量0
喵酱魔法师

Java如何获取到实体类变量名称?

只能给你推荐这个了 "https://baomidou.com/" (https://link.segmentfault.com/?enc=MWxO8It%2BNJKRudCBOKXuSQ%3D%3D.SzP6DqZQDPMPBbb6V0fRpGZFBqtLdBk7w4UiDnkBZK8%3D) ,原理的话肯定是反射了。 // 链式查询 普通 QueryChainWrapper query(); // 链式查询 lambda 式。注意:不支持 Kotlin LambdaQueryChainWrapper lambdaQuery(); // 示例: query().eq("column", value).one(); lambdaQuery().eq(Entity::getId, value).list();
0
0
0
浏览量0
喵酱魔法师

在宏定义中如何添加__FUNCTION__?

""__FUNCTION__"" (https://link.segmentfault.com/?enc=wFw2Suavkc%2FXGW3EdLmBxw%3D%3D.KT15rhrPzxHlE5g2qfGwbThXZrW6kfkH%2FSHuK%2Bddy50A0hJjs4j3VjIfRBe1TKBdRAySMZj2U8Fu7MvqiOYESQ%3D%3D) "__FUNCTION__" 是一个变量,不是一个宏。现在标准里用的名字是 "__func__" 。 因为它是一个变量,所以它不能进行字符串拼接。 你可以用 "%s" 输出它: #define LOG(strFormat, ...) _LOG( "%s:" strFormat, __FUNCTION__, ##__VA_ARGS__)
0
0
0
浏览量0
喵酱魔法师

sql 中变量名怎么改成动态公式获取?

SELECT '222' AS "2023订货额" FROM DUMMY 变量名 2023订货额 中的2023 怎么改成取当前年年份,sql该怎么写
sql
0
1
0
浏览量10
喵酱魔法师

amh面板lngx反代无法使用,出现不能访问怎么解决?

要确认服务器上能否正常访问到后端站点,在服务器用curl测试你源站看返回哪些信息, curl -I "http://xxxx:3000" (https://link.segmentfault.com/?enc=gHLu0786LXMngQxbtNjGzw%3D%3D.b8gkcFdSSubK7NzQdYoJP3f8XGnJrSFn2nSjtmuXUGk%3D) 也可以测试反代amh官网看是否正常, "https://amh.sh" (https://link.segmentfault.com/?enc=jwmLr0L26PkahS8clLUzSg%3D%3D.o3Y00ura6Qhzz53T22Zq4Q%3D%3D) 如果反代amh官网正常,那就是你源站什么原因,如果都不正常可能是lngx虚拟主机、域名解析什么问题了。在lngx主机开日志,先看nginx日志排查。
0
0
0
浏览量0
喵酱魔法师

rust 所有权的问题?

并不是结构体成员不能 move 。 你的成员函数里,self 是一个 reference 。reference 并没有所有权,所以也就无法发生所有权移动。
0
0
0
浏览量0
喵酱魔法师

python Flet 订阅广播无法正常收到对方消息,怎么解决?

"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241015/75a14013093576cd13e02bca2c591c3d.png) 已经联系作者,确认是框架的BUG。
0
0
0
浏览量0
喵酱魔法师

关于前端内存相关的问题?

class B { } class A { constructor() { this.b = new B() } } class BList { constructor() { this.values = [] } push(b) { this.values.push(b) } } const aArray = Array(1000).fill('').map(() => new A()) var bList = new BList() //aArray.forEach(a => { bList.push(a.b) }) "图片" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241016/f5caa40bc34708b791c24da2424f592e.png) 在放开最后一行注释后执行 : A的引用内存反而降低了,A对B的引用好像并没有解除,为什么会降低内存了? "图片" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241016/187cdef29d88cfe052a22530ee2ce173.png) 为什么A对象的内存降低了呢 ==========================================update class B {} class A { constructor () { this.b = new B() } } class BList { constructor () { this.values = [] } push (b) { this.values.push(b) } } const aArray = Array(1000000).fill('').map(() => new A()) const bList = new BList() aArray.forEach(a => { bList.push(a.b) }) "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241016/5e2bd8b773ef4d7d7572238f5fc973c8.png) 1.Blist.values 对应的指针; 2.A.b 对应的指针; 3.Blist.values 指向的数组的指针。 这三个对象是指这样吗,可不可以解释一下
0
1
0
浏览量12
喵酱魔法师

如何为一个组件同时绑定单击和双击事件?

解决措施 通过组合手势绑定,双击手势在前,单击手势在后,就可以同时绑定单击和双击事件。 代码示例 .gesture( GestureGroup(GestureMode.Exclusive, TapGesture({ count: 2 }).onAction((event?: GestureEvent) => { // 功能实现 }), TapGesture({ count: 1 }).onAction((event?: GestureEvent) => { // 功能实现 }) ) ) 参考链接 "组合手势" (https://link.segmentfault.com/?enc=3G0LSFcGCRRoVurF%2BpwwdA%3D%3D.gwnY6t6iq8IpAu%2Fjop1%2Fht%2F3r2qW0hVXpzoyuPR8NHyLcgFYTf3MGi81udNew7IPuUPV2usUQaWpSm3Zb6C4rM84oIcdevAe5XZ0tP8XbCGiB2xxrq7%2FiPgtdI3woddlRRgDpJxp0e8VgHFdBOFn9w%3D%3D)
0
0
0
浏览量0
喵酱魔法师

nodejs 中 UTC 时间戳转化的问题?

别把自己搞晕了,正因为 toUTCString 的返回结果里面的 GMT 标识存在,你获取的到的已经是 UTC 时间戳了。 "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241013/aac61f285cf5ca497f1200ebe043afed.png) * "在线时间戳转换工具(Unix timestamp) - 在线工具" (https://link.segmentfault.com/?enc=WUU1cndc6FngCxBoFMCl7g%3D%3D.Nj%2BnzbaQQtqRpYcWNG0NY65KYLWwchg5H2GbwprghedT2Jh%2BQ%2Fh6RJsaMLrJtByu) 只是你在在打印的时候,默认调取了你当前所在的时区,所以显示成了 +8 的让你感到疑惑。 以你的例子来说,如果你去掉了 "Wed, 24 Jan 2024 06:02:07 GMT" 里面的 GMT ,改为 "Wed, 24 Jan 2024 06:02:07",你就会发现,他是按照你当前时区格式化获取出来的时间戳了,这才有问题。 时间戳记录了的是从 UTC 0 的 1970年1月1日0时0分0秒 到当前的秒(毫秒),换成国内的时区,就是从 1970年1月1日08时0分0秒 开始的了。 所以你在真实时区 +8 和 +0 上获取的同一时间的时间戳都是一样的。 只是在 +8 时区上,想要处理一个 +0 时区的字符串时,需要注意,因为有可能这个字符串被当成当前时区的处理的。换句话说,你在 +0 时区的 2024/01/01 00:00:00 是等于 +8 时区的 2024/01/01 08:00:00 的。但是你在 +0 时区的 2024/01/01 00:00:00 可不等于 +8 时区的 2024/01/01 00:00:00。
0
0
0
浏览量0
喵酱魔法师

没有前端/客户端的系统如何进行接口测试?

有的公司开发的系统没有前端/客户端,接口测试是如何测试的呢?也是跟web接口测试/app接口测试一样吗?传输数据也是使用http协议吗?(因为现在看到网上的课程大多都是讲解http协议传输数据的,其他基本没怎么讲解) 希望知道的小伙伴回答一下,十分感谢
0
1
0
浏览量178
喵酱魔法师

请问 nestjs 有类似 mycat 的分布式数据库中间件么?

请问 nodejs 中有 类似mycat 或 sharingjdbc的分布式数据库中间件么
0
1
0
浏览量169
喵酱魔法师

lnmp-3.6 环境nmp安装扩展(pecl_imagick),卸载扩展(no)失败。?

pecl_imagick是需要依赖image_magick。 在amh软件商店搜索image_magick下载安装完成后再安装pecl_imagick扩展。
0
0
0
浏览量0
喵酱魔法师

如何在Vue中使用path模块不报错?

"path" 是 Node 内置模块,无法在浏览器里运行、也无法被 polyfill。 如果你只是想用来解析拼接下相对路径,可以换成 "path-browserify" 这个模块。 而你贴的这个项目里它能导入是因为它用的 3.x 低版本的 Webpack,此版本的 Webpack 会自动把部分 Node 内置模块在构建时替换成相应的 shims(像 "path" 就是替换成 "path-browserify")。但从 4.x 开始只有少部分模块才会被默认自动替换,"path" 模块已不在此列;从 5.x 开始该特性直接被移除了。但你仍然可以选择向我上面提到的那样自己手动替换,具体哪些内置模块可以这么干,可以看下面的文档: «"https://webpack.js.org/configuration/resolve/#resolvefallback" (https://link.segmentfault.com/?enc=Cz9lhHpz8SvkD3VmDCIOgw%3D%3D.67q%2Bpw6eYldLzkipf6i358ocxDyawgakvjJSgNqhkgf2sM8UfJRQxSXWPpe5rKjdOEqPX3iB7G%2FZVPP%2BxFyT7w%3D%3D)»
0
0
0
浏览量0

履历