Kevin Law

Kevin Law

全栈工程师,擅长Node.js和C#, 前端擅长使用vue和原生JavaScript. 有多年的GIS相关开发经验。 Front-end and back-end developer. Good at Node.js and C#. Have rich experience on GIS and .NET development.
Chengdu

Node.js RSA加密解密与Java实现的对比

近期在对接一个后端服务时,要求请求过程中需要使用RSA加密。请求体需要使用公钥加密,返回体需要使用私钥解密。 接口方提供了Java代码作为参考, 本以为很简单,只是做一下代码翻译。开干的过程才发现没有想象中的容易。 时间主要花在了对加密这一块不熟悉,然后很难判断证书使用不了的原因。整体网上资料也很少, 最后只能通过同时debug Java代码以及Nodejs代码,逐步排查变量。辛酸。。 省流总结: 1. Java代码在读取公钥私钥的过程中, 不需要添加行首行尾, 类似 -----BEGIN PRIVATE KEY----- 以及 -----END PRIVATE KEY-----, 而Node.js 需要. 2. Java默认使用的padding 与nodejs不同, nodejs在加载秘钥时需要指定padding. 具体padding 可以从 crypto.constants.RSA_PKCS1_PADDING 获取,使用下面类似代码。const encryptedBlock = crypto.publicEncrypt( {
2 min read
CentOS 7 防火墙操作

CentOS 7 防火墙操作

查看防火墙状态 sudo systemctl status firewalld.service 开启防火墙 sudo systemctl start firewalld.service 关闭防火墙 sudo systemctl stop firewalld.service 开启指定端口: # --permanent 控制是否永久添加, 没有该参数的规则将在reload 之后丢失 sudo firewall-cmd --zone=public --add-port=端口号/tcp --permanent # 也可以设置端口范围段 sudo firewall-cmd --zone=public --add-port=20000-30000/tcp 移除指定端口: # --permanent 控制是否永久移除 sudo firewall-cmd --permanent --zone=public --remove-port=81/tcp
1 min read
call() , apply() 与 bind() 实例详解
Frontend

call() , apply() 与 bind() 实例详解

call() , apply() 与 bind() 详解 我们知道可以用call(), apply() 和 bind()这三个函数都是用来完成函数调用,并且设置this指向。 call()和apply()是 ECMAScript3 标准引入,而bind()函数则是在 ECMAScript 5 引入。 这边文章会用几个小例子来回忆一下他们之间有什么不一样。 用法 call()和apply() 会立即调用函数, 而bind()只会返回一个函数引用,当后面真正调用返回的函数的时候,函数里面的this将会指向给bind() 函数传入的参数,并在调用新函数时,将给定参数列表作为原函数的参数序列的前若干项, 所以 bind()函数非常适合在事件回调的时候修改this 指向, 有 React 经验的朋友应该会有更深的感受。 call() var dist = 'Beijing'; function greet(name, hometown)
3 min read
Visual Studio Code断点调试Vue
Visual Studio Code

Visual Studio Code断点调试Vue

> 很多人习惯在 Chrome 的调试窗口中调试 Vue 代码, 或者直接使用 console.log 来观察变量值, 这是非常痛苦的一件事,需要同时打开至少 3 个窗体。个人还是更加习惯于断点调试。这篇文章将介绍如何配置 Visual Studio Code 和 Chrome 来完成直接在 VS Code 断点调试代码, 并且在VS Code的调试窗口看到Chrome中console相同的值。 设置 Chrome 远程调试端口 首先我们需要在远程调试打开的状态下启动 Chrome, 这样 VS Code 才能 attach 到 Chrome 上: Windows * 右键点击 Chrome 的快捷方式图标,选择属性 * 在目标一栏,最后加上--remote-debugging-port=9222 注意要用空格隔开 macOS
3 min read
基于Nginx, Node.js 和 Redis的Docker容器化工作流

基于Nginx, Node.js 和 Redis的Docker容器化工作流

在本文中,我将详细介绍基于Docker的示例工作流的一些概念。对于这个例子,我有一个非常简单的Node.js应用程序,用于递增存储在Redis上的计数器。我将Redis和Node应用程序独立开,因为我希望能够根据负载来扩展节点应用程序。首先,我有3个运行该应用程序的节点服务器实例。还有一个Nginx节点位于应用程序之前,用于节点实例的负载均衡。 我们可以想象得到我们的容器结构: * 1个Redis容器 * 3个Node容器 * 1个Nginx容器 我们的业务架构应该如下图所示: 我们可以使用Docker命令从头开始构建容器,但为了更容易,我们将写一个Dockerfile,它可以为我构建容器。后面我们也会用到Docker Compose来编排我们应用程序的Docker容器。 Redis 容器 让我们使用来自DockerHub的官方Redis镜像作为Redis容器。它预先安装了Redis服务器,并在默认端口6379上运行。因此,只要您确定了默认设置,就不需要配置任何设置。您可以直接从Redis映像创建并运行容器: docker run -d --name redis
9 min read