2019-01-04

2019-01-04

[2019-01-24]调用Node http server的close方法, 不会马上停止服务器
[2019-01-24]Mac压缩文件避免生成__MACOSX文件
[2019-01-19]小程序this.selectComponent is not a function
[2019-01-11]小程序异步api中complete回调的触发时机
[2019-01-10]低版本微信小程序因没有把页面声明到app.json报错, 会导致其他页面加载出错
[2019-01-08]url encode, space被encode成+
[2019-01-04]安卓微信 7.0 版本下, 默认不信任用户证书

调用Node http server的close方法, 不会马上停止服务器

开发中发现, 主动调用http.Server的close方法, 服务器并不会马上关闭

后来发现是Server(包括koa和express)的response的header中Connectionkeep-alive

Connectionkeep-alive时, 只有所有的客户端都断开连接之后, server才会真正的关闭.

如果想调用close方式及时停止server的话(如自己的测试服务器), 已express为例

const app = express();
app.use(express.static('static/path', {
  setHeaders: function (res, path, stat) {
    res.set('Connection', 'Close');
  }
}));
// https://github.com/nodejs/node-v0.x-archive/issues/9066
app.use(function (req, res, next) {
  res.set('Connection', 'Close');
  next();
});
[2019-01-24]Mac压缩文件避免生成__MACOSX文件

如果使用MacOS系统自带的压缩工具, 生成的压缩包在其他系统(windows/linux)系统下解压, 会多出一个__MACOSX文件夹.

如果要避免生成这个文件, 可以使用命令行的zip命令.

zip -r zip.zip . 
# 如果上述命令不好使, 则使用zip -x选项
zip -r zip.zip . -x "__MACOSX"
[2019-01-19]小程序this.selectComponent is not a function

除去基础库的版本之外, 只有使用了自定义组件的组件或页面实例才会有selectComponent这个api

就是如果对应的page.json/component.json中没有usingComponents字段, 则对应的实例中不会有selectComponent方法

[2019-01-11]小程序异步api中complete回调的触发时机

之前有在request api的complete回调中上报接口耗时

const start = new Date().getTime();

wx.request({
  // ....
  complete: function () {
    const end = new Date().getTime();
    const cost = end - start;
    // 上报cost
  }
});

后面查看数据的时候发现请求的耗时偏大, 才想起complete回调的触发时机应该不是即时的. 简单的测试下来就可以确认success/fail回调和complete回调是顺序执行的.

wx.getSystemInfo({
  success: function () {
    console.log(new Date().getTime());
    for (let index = 0; index < 10000000; index++) {
      const a = new Date();
    }
    console.log(new Date().getTime());
  },
  complete: function () {
    console.log(new Date().getTime());
  }
})
[2019-01-10]低版本微信小程序因没有把页面声明到app.json报错, 会导致其他页面加载出错

微信版本6.6.6对应小程序基础库版本2.0.9, 如果一些页面已经调用了Page(page)生成页面实例, 但是却没有在app.json中进行声明, 可能会导致报错

pages/xxxx/yyyy has not been declared in app.json

可能会导致后续的页面的实例化错误.

具体原因没有进行详细的测试, 不过把对应页面的代码(js/json/wxml/wxss)删除之后就正常了

[2019-01-08]url encode, space被encode成+

开发的时候有个需求要对是把数据传递给后端, 然后后端校验处理后又传递给了另一个客户端. 其中数据有中有类似2019/01/09 18:49:23这样的时间戳.

调试的时候发现, 数据中的时间戳经过传输过程中的encode和decode之后, 最终客户端拿到的数据变成了2019/01/09+18:49:23

关于这个行为可以看下这个问题When to encode space to plus (+) or %20?

很好解释了空格什么之后会被encode成+%20

[2019-01-04]安卓微信 7.0 版本下, 默认不信任用户证书

安卓微信7.0版本, 已默认不信任用户安装的证书, 会导致代理/抓包工具无法正常使用.

可临时使用http进行调试/抓包等. 或者使用安卓7.0以下的版本(注意微信7.0版本和安卓7.0版本的区别)进行调试.

现在好像抓包又没有问题了, 难道又改过来了?

小程序注意要勾选不校验域名和https的选项, 且要打开调试模式. 没有打开调试模式的时候感觉默认都是以线上环境的标准在运行.