Node 牛刀小试
共 30 篇
Node 中的 require 与 module
发布于在 node 环境中,有两个内置的全局变量无需引入即可直接使用,并且无处不见,它们构成了 nodejs 的模块体系: module 与 require。
40 行代码实现精简版 koa
发布于更新于当我们在深入学习一个框架或者库时,为了了解它的思想及设计思路,也为了更好地使用和避免无意的 Bug,有时很有必要研究源码。对于 koa 这种极为简单,而应用却很广泛的框架/库更应该了解它的源码。
浏览器跨域问题与服务器中的 CORS 配置
发布于更新于跨域,这或许是前端面试中最常碰到的问题了,大概因为跨域问题是浏览器环境中的特有问题,而且随处可见,如同蚊子不仅盯你肉而且处处围着你转让你心烦。你看,在服务器发起 HTTP 请求就不会有跨域问题的。当谈到跨域问题的解决方案时,最流行也最简单的当属 CORS 了。
如何高效及正确地打日志
发布于在服务器应用(后端项目)中,完善并结构化的日志不仅可以更好地帮助定位问题及复现,也能够发现性能问题的端倪,甚至能够帮忙用来解决线上 CPU 及内存爆掉的问题。
async_hooks、CLS 与 ALS
发布于更新于为什么需要监听异步资源?在一个 Node 应用中,异步资源监听使用场景最多的地方在于:异常捕捉时需要提供用户信息,在每次客户端请求中保持一致的用户信息
Node 中的全链路式日志
发布于有效解决此类问题,我们需要依赖全链路式的日志作为蛛丝马迹。如当发现测试环境某条 API 延迟过高时,通过该 API 在日志系统中找到所涉及到的所有关键逻辑及数据库查询,查找是否 SQL 查询过多或其中有慢查询所致,或者是否被上游服务拖累。
Node 应用中的单元测试
发布于更新于新增或迭代功能时,用 BDD/TDD 思路配合 assert/chai、mocha 或 jest 组织用例,并用 nyc、codecov 查看覆盖率与 API 测试。
Node 应用中如何进行参数校验
发布于Controller 层 Fail Fast:JSON Schema/ajv 与 Joi 对比、koa-joi-router 路由校验,以及 safe-regex 防 ReDoS。
我是如何高效地组织 npm scripts
发布于更新于众所周知,一个 Javasript 项目的脚本类工具,可以使用 package.json 中的 scripts 字段来组织,简单来说,这就是 npm script 。 最典型最常用约定俗成的一个是 npm start ,用以启动项目: 约定俗成的还有很多,如下所列 + npm install + npm test + npm publis
Node 脚本异常时如何安全退出
发布于Node 进程 exit code、echo $? 与 strace,说明 CI/Docker 构建里脚本失败未被感知时镜像仍看似成功的问题。
如何使用 Node 开发一个命令行工具
发布于更新于一个 Node 脚本,一个 PATH 环境变量,npm 安装全局模块时是如何处理命令行脚本的?本文将引导你使用 Node 开发一个好用漂亮的命令行工具
使用 Docker 部署 Node 应用
发布于更新于从最小 Node HTTP 服务写 Dockerfile,谈 NODE_ENV=production、npm ci、config/migrate 步骤及 node-gyp 多阶段构建。
Node 进程内存监控
发布于用 pidstat 观察 Node 进程内存,结合 Koa 泄漏示例,并谈生产环境找 pid 与容器 OOM 上调 limits 的经历。
如何写一个 C 扩展
发布于更新于大家好,我是山月。 我还有工作的时候,据我同事说,他作为一个 Node 开发者去字节跳动面试时,面试官问到: 你写过 C++ 的扩展吗? 自此之后,他再也没有面试过 Node,前几天听闻他的消息时,他的 title 已变成前端开发工程师,当他再次大厂面试时,对以前的 Node 经验闭口不提。 今天将学习 node 中的 napi , 并从
在 VS Code 中调试 nodejs
发布于更新于大家好,我是山月。 不啰嗦,直接开始。 由于 VSCode 内置 Node 调试器,调试 Node 极其简单,遵循以下步骤 1. 在 ToolBar 中找到 Run And Debug 按钮并点击,或直接 <Command+Shift+D> 打开调试 1. 在调试面板顶测选择 Run Current File 1. 点击绿色调试小按钮,开
Javascript 调试基础与示例
发布于更新于使用 Javascript 写代码,如论是在 Node 后端环境还是前端单页应用,调试是资深程序员的进身之阶! 程序员的水平提示之路只有一条,那就是乐此不疲地调试代码。某非著名非大师山月如是说道。 + Resume : 执行到下一个断点 + Step Over : 执行下一语句 + Step Into : 执行下一语句,如遇到函数,则进入
如何调试 node.js 源码
发布于node.js 源码托管在 $1。 通过以下命令对 node.js 源码进行编译。 等待的时间较长,需要一顿吃火锅的功夫。 源码编译之后会生成 ./out 目录,在根目录中会生成可执行命令行工具 node 与 node_g ,指向 ./out 中的符号链接。 使用 node_g 替代全局的 node ,可对源码进行调试。
Body Parse / Raw Body
发布于更新于在 Node Server 中, HTTP Request 基于 Readable Stream ,我们可以通过读取可读流的方式,将原始请求体读取出来。 简单粗暴的解析代码如下: 我们知道,为了节省带宽,在针对静态资源进行部署时,往往会做 gzip/brotli 的压缩。 从浏览器发的请求来看,也会有经过压缩的内容,此时在服务器端需要先把
环境变量应该扔在哪里
发布于更新于+ Application: .env + Container: .env + CI: Gitlab CI + Kubernetes Config/Environment + Consul/Vault
Node 中异常上报与监控
发布于Node 后端在 API/GraphQL 中间件与 process 事件里收异常,FormatError 字段设计,以及 Sentry 上报与错误级别指标。
Node 中的事件循环
发布于更新于一句关于 Node 事件循环面试题的随想:你只能看到你想看到的观点,面试官只想听到他所背会的面试题。
FileSystem API
发布于更新于Node 文件系统相关的 npm 包清单:fsevents、fs-extra、chokidar、graceful-fs、readdirp、fstream,以及 Stat、Mode 等要点。
一个简单的 HTTP Server
发布于更新于> 本文涉及到的核心模块: > > + http > + stream > + buffer > + zlib: (间接设计) > > 本文涉及到以下库及模块: > + $1: 解析 MIME TYPE > + $1 > + $1: 用以解析 URL。同时也可使用原生模块 url。 > + $1: 用以接续 querystring。同时也
日志的收集
发布于更新于日志收集笔记:filebeat、IOPS、日志对 CPU 与内存的影响等要点,附一段在 class / extends 小节下用原型链实现继承的 JavaScript 示例。
Node 做服务端开发的那些事儿
发布于更新于Node 做服务端开发时,你要了解的这些事 + $1 + Node实践语法篇: 当导入一个 module 时都做了什么 + $1 + $1 + $1 + $1 + $1 + $1 TODO: + $1 TODO: + $1 + $1 TODO: + $1 TODO: + $1 + $1 + $1 TODO: + $1 TODO:
在 Node 中引入一个模块时发生了什么
发布于更新于(function(exports, require, module, __filename, __dirname) { // 所有的模块代码都被包裹在这个函数中 const fs = require('fs') const _ = require('lodash') }); js require('internal/modules/cj
Node 服务端框架路由解析
发布于更新于大家好,我是山月。在上篇文章介绍了 HTTP 报文及简单的服务端框架要素,如如何接受请求参数等。这篇文章介绍另一个常见的主题:路由。 最简单的路由可使用 req.url 进行路由分发不同的逻辑,代码如下所示。 但是对于一个非Demo式的页面,业务逻辑都堆在一起,这显得太为简陋。 作为一个能够在生产环境使用,较为复杂的路由至少能够解析以下路
sentry
发布于通过 npm 安装 @sentry/node,并用 Sentry.init 配置 dsn 的最小接入示例。
Stream
发布于更新于1. 服务器中的 HTTP Request 1. 客户端中的 HTTP Response 1. 标准输出 stdout + destroy + finish + error + WritableState / + needDrain + buffered + Symbol(KHandler) + res._removeTE / res.c
Stringify: Node 服务端序列化及反序列化优化
发布于更新于> https://github.com/fastify/fastify/blob/main/docs/Validation-and-Serialization.md fast-json-stringify https://npm.devtool.tech/json-stringify-safe 在服务端向客户端发送数据时,需要把梳理好的