Node.js 知多少

#序言


自从开始接触 Node 起,就离不开查阅大大小小的书籍、课程等等,大部分书籍和网络教程其实多多少少都是讲到一些框架或者生态里的各类工具库的使用(生态是 Node 引以为‘豪’的一点),偏向于速成,当然,我认为 Node 无论是在学习成本还是开发效率上都是数一数二的。

这些途径的最终目的都是好的,也是一个帮助初学者快速入门的办法: 学会一门语言(Javascript、Typescript…),通过框架的使用(Express、Koa…),快速上手搭建一个能够正常运行的Web应用,整个过程并不是很难,也容易让人产生满足感(至少不会像 Java 那一套得折腾老半天)。

​可以确定的是,无论是框架、还是各类代码库,都是为了快速解决问题而诞生的,网上「10分钟带你实现一个 Web 应用」、「10节课教你用 Node 搭建自己的博客」…这类的资料或者教程比比皆是,这些对初学者是非常友好的,因为他们只需要跟着教程,一步一步敲击命令就可以实现一个像模像样的 Demo,整个过程可能大家只会明白如何调用框架的 API 启动一个 Web Service,比如 Express

1
2
3
4
5
6
7
8
9
10
11
const Express = require('express')

const app = new Express()

app.get('/', (req, res) => {
res.send('Hello World!');
});

app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});

执行 node app.js,浏览器中访问 http://localhost:3000 就能得到一个最简单的 Demo.

在整个学习过程中,可能仅仅知道引入 express 这个库,然后调用它的 API 就可以了,甚至很多人误以为这就是 Node。也有很多人觉得,我只需要知道怎么用这个框架就好,并不需要知道它是怎么实现的,这些都是框架作者需要去了解的事情。

​我认为上述两点都是错误的,是的 Node 是非常灵活并且原生(简单)的,它并不提供一套原生的 Web Service解决方案,而是提供了一个丰富、完整高效的运行环境,让人们能够在此基础上拓展以及构建自己想要的解决方案。如果在使用这些框架之前,你并不知道框架的实现原理、 Node 本身的运行原理,那么在进行实际功能开发的时候、遇到了框架无法或者还未解决的问题的时候,你将寸步难行,无法运用已有的知识和理论去尝试快速定位和解决问题。

Shell 中的极品-- Zsh

title

用了很久的 zsh,一直感叹它的强大与便捷,很早就打算记录一篇安装和使用 zsh 的心路历程,工作忙一直在往后拖(借口-。-)

知乎传送门: 为什么说 zshshell 中的「极品」?

# zsh 是什么?

Z Shell(Zsh) 是一种Unix shell,它可以用作为交互式的登录shell,也是一种强大的shell脚本命令解释器。Zsh可以认为是一种Bourne shell的扩展,带有数量庞大的改进,包括一些bash、ksh、tcsh的功能。

简而言之,就是 shell 脚本语言的一种扩展与加强。

# zsh 有哪些功能?

From Wiki

  • 开箱即用、可编程的命令行补全功能可以帮助用户输入各种参数以及选项。
  • 在用户启动的所有shell中共享命令历史。
  • 通过扩展的文件通配符,可以不利用外部命令达到find命令一般展开文件名。
  • 改进的变量与数组处理。
  • 在缓冲区中编辑多行命令。
  • 多种兼容模式,例如使用/bin/sh运行时可以伪装成Bourne shell。
  • 可以定制呈现形式的提示符;包括在屏幕右端显示信息,并在键入长命令时自动隐藏。
  • 可加载的模块,提供其他各种支持:完整的TCP与Unix域套接字控制,FTP客户端与扩充过的数学函数。
  • 完全可定制化。

Linux--单双引号之分

插曲

今天下午同事突然抛出一个问题,shell 中我想 grep 这么一段话:

1
scenarioFieldConfig's _id

有哪几种方式可以实现呢?

Git 命令巧用

重置(reset)某次提交改动的文件

1
git checkout commitId -- file1 file2 file3

是时候了解一下「IPFS」

背景

IPFS (InterPlanetary File System) 中文名是 「星际文件系统」,由 Juan Benet 在2014年5月份发起,Protocol Labs 实验室维护和发展。

IPFS本质上是一种内容可寻址、版本化、点对点超媒体的分布式存储、传输协议,目标是补充甚至取代过去20年里使用的超文本媒体传输协议(HTTP),希望构建更快、更安全、更自由的互联网时代。

推荐Mac下常用软件(开发、设计), 文内有惊喜

常用的开发工具:

合集链接: 平台地址

下载后解压需要解压密码,统一为: xlient.info

你不知道的 Git Log

原文链接

假设您正在与多个开发者共同维护管理复杂的 git 代码库,那您可能会使用GitHubBitBucket 等工具有深入研究提交历史,并且希望从中找出分支以及合并 issue 的相关问题。

ES6之Proxy-用20行代码写一个API SDK

ES6之Proxy-用20行代码写一个API SDK

目的

ES6 里新增了很多概念及语法,有很多我们日常开发都会用到,比如数组对象的解构,箭头函数,class 等等,但是类似 Proxy 这样的特性却很少用到(个人观点), 借这个机会, 简单的过一遍 Proxy 相关的概念及适用场景。

个人开发经验总结

  1. 日常业务开发,不要新造轮子,有好的想法或者需求应提出架构任务,避免造出来的东西未同步给大家形成一个标准,很难有人使用

细说Javascript中的“指针”

故事背景

最近有朋友问我为什么我运行js代码会抛出如下异常

1
2
3
4
const Hoek = require('hoek');
^^^^^
SyntaxError: Use of const in strict mode.
}

Nodejs通过tb-excel自定义解析Excel

众多的库中,能够很轻松的找到解析xlsx, csv格式文件的第三方库,并且有许多质量不错的库,如 node-xlsx , excel-parser, excel-export等,都能够帮助我们解析或者生成xlsx, csv文件,但是大部分都局限于文件

Nodejs导出excel实战

我们都知道nodejs的内存由于v8内存分配机制的原因十分有限

64位系统也只能占1.4G左右, 因此当我们要生成或者读取大文件的时候内存的吃紧会给我们造成极大的困扰, 遇到这样的情况Node给了我们一个很好的解决方法 stream

Nodejs与nginx的完美搭配

引言


node自己本身可以作为服务器进行驱动,但是node本身对文件的处理能力并不是很好,所以当我们的生产环境中应尽量使用nginx来处理静态的资源以及反向代理,同时也解决了node分布式以及负载均衡的相关问题。

mongodb诊断工具explain()最新API详解

###起因


说道explain()我就不得不吐槽一下被坑的经过(假设你已知晓索引相关概念)

在数据量和吞吐量越发庞大的今天,优化查询速度是提高系统性能的一个关键点,而获取这类相关信息的重要诊断工具之一就是explain(),引用用《MongoDb权威指南》书中的解释:

通过查看一个查询(find)的explain()输出信息,可以知道查询使用了哪个索引,以及是如何使用的。
最常见的输出有两种类型:使用索引的查询和没有使用索引的查询