2020-03-11

2020-03-11

[2020-03-24]微信环境使用 input 选择图片
[2020-03-24]typeorm mysql 匹配字段是否包含多个子串
[2020-03-24]js 最多保留2位小数
[2020-03-23]git merge vs git rebase
[2020-03-20]typescript 方法对象参数析构及默认值设置
[2020-03-20]Mac 端企业微信工作应用页面代理
[2020-03-20]企业微信 JSSDK wx.agentConfig is not a function
[2020-03-19]输出 Error 得到结果 {“isTrusted”:true} 而没有实际错误信息
[2020-03-13][转载]css 字体相关内容
[2020-03-11]vscode 配合 webapck.resolve 进行路径提示

[2020-03-24]微信环境使用 input 选择图片

来自小伙伴的整理

wx input file

[2020-03-24]typeorm mysql 匹配字段是否包含多个子串
const where = { /** 其他条件 */ };
const sub1 = '备注子串1';
const sub2 = '备注子串2';

// 检索所有 remark 字段中包含 `备注子串1` 及 `备注子串2` 的 user 
user
  .createQueryBuilder('user')
  .where(where)
  .andWhere(`locate('子串', remark)`)
  .addWhere(`locate('子串', remark)`)
  .getManyAndCount();
[2020-03-24]js 最多保留2位小数

转载自 https://www.jianshu.com/p/56d129920d71 , 这里只是做个记录方便自己查阅

扩展最多保留 n 位小数

function fixed(value, len) {
  const scale = Math.pow(10, len);

  return Math.round(value * scale) / scale;
}

fixed(2.885, 2);
fixed(2.885, 1);
[2020-03-23]git merge vs git rebase

merge 和 rebase 的对比, 整理过很多次了, 好记性不如烂笔头的, 在这里同步一下

注意: 不管是 merge 还是 rebase 都是非常复杂且强大的工具, 针对不同场景可以解决不同的问题, 而这里列举的只有一些流于表面的比较和结论, 但可以解决我日常工作99%以上的分支管理相关问题, 旨在给自己随时方便查阅补充而非定义孰优孰劣.

# 原始Origin
             D----E        F2
            / 
A --- B --- C --- F        F1

# merge 操作
              D-------E    
             /         \
A --- B --- C --- F --- G

# 优点: 记录了真实的commit情况, 包括每个分支的详情, 已经合并的操作
# 缺点: 操作频繁、不规范的情况下, 容易造成分支混乱

# rebase 操作(On branch F1: git rebase F2) 
A --- B --- C --- D --- E --- F’

# 优点: 得到更简洁的项目历史
# 缺点: 如果出现代码问题的话不容易定位,因为提交历史已经被重写了

结论, 如无必要尽量不要在公共分支上执行 rebase

       D----E             Feature/1
      / 
A --- B --- C --- F      master
             \
              G --- H --- I     Feature/2

# rebase 操作(On branch master: git rebase Feature/1)
A --- B --- D --- E --- C’ --- F’      master

# On branch Feature/2
A --- B --- C --- G --- H --- I     Feature/2

可以看上述的例子, 如果在 master 分支上 rebase 了 Feature/1 分支, rebase 过后的 master 分支和 Feature/2 的根源节点从 C 变成了 B

且 master 的提交记录被重写 (C -> C', F -> F'), 如果此时出现了 bug, 需要通过溯源提交记录来定位的话就会变得十分困难

[2020-03-20]typescript 方法对象参数析构及默认值设置
function func({
    a = false,
    b = [],
    c = {}
}: { 
    a?: boolean; 
    b?: string[]; 
    c?: any 
} = {})
[2020-03-20]Mac 端企业微信工作应用页面代理

目前工作台应用暂时没有办法在 Mac 端企业微信进行调试, 原因就是 Webview(UIWebview or WKWebview)都无法设置代理

  1. 设置企业微信代理 https://work.weixin.qq.com/help?doc_id=13888, 只在第一个请求有效
  2. proxifier 全局代理, 不知道为啥工作台应用页面的请求就是抓不到, 难道我打开方式不对?
  3. 设置系统代理 - 可行, 具体看下方

首先在新建一个 pac 文件, 内容如下

function FindProxyForURL(url, host) {
  if (url.indexOf("target.host.com") !== -1) {
    // 这里要替换成需要代理的目标 host
    return "PROXY 127.0.0.1:8000"; // 转发到代理服务器
  }

  return "DIRECT"; // 其他请求正常发出
  // return "PROXY 127.0.0.1:xxxxx"; // 或转发到系统代理
}

然后启动一个静态服务器来 server 上述的 pac 文件, 并修改系统代理

路径提示

这样打开工作台应用, 就可以使用本地服务器进行调试了

而移动端企业微信的话, 因为移动端可以设置手机的网络代理

可以比较方便实现上述述求

而如果不需要使用 agentConfig 及其他企业微信特有的 JSSDK 接口的话, 也可以在微信开发者工具中调试

另外想到不知道可不可以通过 远程开发 的手段, 在开发测试服务器上直接以开发模式(npm run dev)运行

然后 vscode 通过 remote ssh 等远程开发工具直连开发测试机实时修改代码调试

而由于是线上服务器, 就不需要设置代理了, 当然开发环境的维护成本就上去了

[2020-03-20]企业微信 JSSDK wx.agentConfig is not a function

可以看下这个问题#wx.agentConfig is not a function

里面提到不能把文件下载到自己的服务器进行下发, 必须使用 http://res.wx.qq.com/open/js/jweixin-1.2.0.js

另外JSSDK 基础接口文档中也提到了

agentConfig仅在企业微信2.5.0及以后版本支持,微信侧不支持(微信开发者工具也不支持)。

调试过程中发现如果参数错误(如签名错误)好像也会报这个错

[2020-03-19]输出 Error 得到结果 {“isTrusted”:true} 而没有实际错误信息

今天在调试一个页面问题, 试着把错误对象通过 alert 打到页面上

alert(JSON.stringify(err)); // 因为是在调试企业微信工作台应用页面, 目前来看好像不支持控制台调试 - -, 唯有麻烦一点了.

发现获取的结果是只有简单的 {“isTrusted”:true}, 而非具体的错误信息

去搜了一下, 原来 JSON.stringify 只能处理可被枚举的属性, 但是 Error 对象中的错误信息都是不可枚举的(inenumerable)

所以直接 JSON.stringify 的话会丢失所有错误信息

可以这样来处理

JSON.stringify(err, ["message", "arguments", "type", "name"]);
[2020-03-13][转载]css 字体相关内容

其实这部分内容大部分整理自segmentfault

我也在 segmentfault 上收藏了, 但是每次再去找的时候还是觉得比较麻烦, 所以还是在自己的 blog 上记录一下

如何优雅的选择字体(font-family)

CSS 字体设置的几个问题?

[2020-03-11]vscode 配合 webapck.resolve 进行路径提示并能跳转等

之前曾记录过vscode 配置 jsconfig.json 支持 webpack alias resolver

通过配置 jsconfig (如果是 ts, 则是 tsconfig), 让 vscode 可以正常进行路径提示并进行代码跳转, 但美中不足的是, 只有 .js 文件能被正常提示

后面发现还有 path-intellisense 同样也可以配置路径映射

{
  "path-intellisense.mappings": {
    "@component": "${workspaceRoot}/component"
  }
}

效果如下

路径提示

但还是没有解决最终解决问题, 因为配置 path-intellisense 后并不能进行代码跳转, 但同时配置 path-intellisensejsconfig/tsconfig时, 在具体的 import 中好像又只有后者会生效

效果如下

路径提示

目前还没找到真正解决这个问题的方法

未完待续…..