util

    • URL
    • [Doc] Query Strings (查询字符串)
    • [Doc] Utilities (实用函数)
    • [Basic] 正则表达式

    想了解更多? 你可以这样:

    1. Array(range).fill(0)
    2. .map((_, i) => String.fromCharCode(i))
    3. .map(encodeURI)

    range 先来个 255 试试 (doge

    query string 属于 URL 的一部分, 见上方 URL 的表. 在 Node.js 中有内置提供一个 querystring 的模块.

    方法 描述
    .parse(str[, sep[, eq[, options]]]) 将一个 query string 解析为 json 对象
    .unescape(str) 供 .parse 调用的内置解转义方法, 暴露出来以供用户自行替代
    .stringify(obj[, sep[, eq[, options]]]) 将一个 json 对象转换成 query string
    .escape(str) 供 .stringify 调用的内置转义方法, 暴露出来以供用户自行替代

    Node.js 内置的 querystring 目前对于有深度的结构尚不支持. 见如下:

    1. const qs = require('qs');
    2. let arr = [1,2,3,4];
    3. let str = qs.stringify({arr});
    4. console.log(str); // arr%5B0%5D=1&arr%5B1%5D=2&arr%5B2%5D=3&arr%5B3%5D=4
    5. console.log(decodeURI(str)); // 'arr[0]=1&arr[1]=2&arr[2]=3&arr[3]=4'
    6. console.log(qs.parse(str)); // { arr: [ '1', '2', '3', '4' ] }

    通过 https://your.host/api/?arr[0]=1&arr[1]=2&arr[2]=3&arr[3]=4 即可传递把 arr 数组传递给服务器

    util.is*() 从 v4.0.0 开始被不建议使用即将废弃 (deprecated). 大概的废弃原因, 笔者个人认为是维护这些功能吃力不讨好, 而且现在流行的轮子那么多. 那么一下是具体列表:

    • util.debug(string)
    • util.isArray(object)
    • util.isBoolean(object)
    • util.isBuffer(object)
    • util.isDate(object)
    • util.isError(object)
    • util.isFunction(object)
    • util.isNull(object)
    • util.isNullOrUndefined(object)
    • util.isNumber(object)
    • util.isObject(object)
    • util.isPrimitive(object)
    • util.isRegExp(object)
    • util.isString(object)
    • util.isSymbol(object)
    • util.isUndefined(object)
    • util.log(string)
    • util.print([…strings])
    • util.puts([…strings])
    • util._extend(target, source)

    其中大部分都可以作为面试题来问如何实现.

    util.inherits

    正则表达式最早生物学上用来描述大脑神经元的一种表达式, 被 GNU 的大胡子拿来做字符串匹配之后在原本的道路上渐行渐远.

    整理中..


    Most depended-upon packages

    1. const fs = require('fs');
    2. const path = require('path');
    3. function traversal(dir) {
    4. for (let item of fs.readdirSync(dir)) {
    5. let filepath = path.join(dir, item);
    6. try {
    7. let fd = fs.openSync(filepath, 'r');
    8. let flag = fs.fstatSync(fd).isDirectory();
    9. fs.close(fd); // TODO
    10. if (flag) {
    11. res.push(...traversal(filepath));
    12. } else {
    13. res.push(filepath);
    14. }
    15. } catch(err) {
    16. if (err.code === 'ENOENT' && // link 文件打不开
    17. !!fs.readlinkSync(filepath)) { // 判断是否 link 文件
    18. res.push(filepath);
    19. } else {
    20. console.error('err', err);
    21. }
    22. }
    23. }
    24. return res.map((file) => path.basename(file));
    25. }

    当然也可以 Oh my :