实现 Mongoose Schema 间继承

JavaScript mongoose 继承 数据库 原型继承 Schema

在创建数据库模型时我们希望这些模型能够互相继承或扩展, 例如一个银行网站可能所有模型都需要实现逻辑删除、 都需要记录创建人、最后修改人,以及删除人的信息。 通常可以通过扩展(比如mixin)和继承(inherit)两种方式来实现。

对于小规模网站(比如20个模型以下)来讲, 继承的方式已经足够通用而且继承的代码复用方式编写代码更加方便。 Mongoose并未直接地提供改选项,本文实现一个基本的模型间继承关系。

恢复 TMUX 工作区

Bash Session Tmux

我们知道使用 TMUX 后状态会保存在 Server 端,你的 Terminal 重启不会丢失任何东西。 但 Server 重启后 Session 会全部丢失,如果你像 Harttle 一样在开发 PC 本地运行 Tmux Server 的话, 每次开机后都需要重新建立各种会话和窗格。

但没有什么是不能自动化的,我们可以通过 Tmux 配置文件(即初始化脚本)来自动建立工作区。 本文便来手动编写一个初始化工作区的 TMUX 脚本。

为Express.js编写一个Logger

Express.js JSON JavaScript Node.js

Express.js是Node.js下最基础最灵活的Web服务器。 Express的日志工具有很多,比如默认的访问日志工具morgan, 通用日志工具winston等等。

本文便来发掘一下这些日志工具的优秀特性,并一一给出实现: 对象输出、日期前缀、访问日志,模块名前缀,以及彩色输出等。

Makefile构建前端项目

Shell Linux Makefile Unix awk grep sed

Make是GNU下的构建自动化工具,用于从源文件构建可执行程序和程序库。 由Makefile定义构建依赖关系,运行Make时这些依赖会递归地展开。 可以说Make和Shell是Linux下生存的必备技能,当然还需要一款你热爱的编辑器。

Make还会检查文件修改时间来判断是否需要执行某条依赖。 因此除了程序库外,Make也常常用于自动更新存在文件间依赖的项目。 比如:批量更新网站缩略图

Harttle曾使用过上百个Grunt/Gulp插件,尝试着去体会它们所承诺的那些优雅。 而今Harttle决定重新回到Make的怀抱,在前端为什么需要构建工具? 一文中详述了这一选择的全部理由。

前端为什么需要构建工具?

Makefile Gulp CommonJS Grunt JavaScript 测试 模块化

社区中有不少项目引入GulpGruntWebpack等工具来支持测试和发布流程。 这些构建工具都有着这样的或者那样的缺点,此时Node社区悄悄兴起了一群npm党。 他们认为应该坚决干掉这些构建工具,其坚决程度好不亚于Vim党。

例如 2014 年发布在 keithcirkel 的why-we-should-stop-using-grunt 和 2016 年发布在 infoQ 上的我为何放弃Gulp与Grunt,转投npm scripts。 (抱歉又暴露出国内前端领域的2年落差)

虽然也烦透了Gulp/Grunt,但Harttle坚持认为我们需要构建工具。 本文梳理了Web前端的那些构建需求,整理了Harttle经历过的前端构建工具。 也给出了Harttle的信仰:Makefile

配置 SSH 自动登录

Linux RSA SSH Shell TCP Unix X11

SSH 是一个 Linux 下远程登录工具。 可以通过 openssh 软件包来安装,有 BSD 协议的发型版。 如果你尚不了解Shell、终端、虚拟终端、控制台、命令行的概念区别,请参考:Shell的相关概念和配置方法

免密码登录(俗称 SSH 信任关系)可以极大地方便 SSH 的使用, 类似 scp, tmux, X11 forward 的一些操作都会变得更加便捷。 其原理是指定一对公钥私钥,让服务器直接通过公钥识别登录者。 本文记录一次完整的服务器、客户端的配置过程。

Windows 下推荐使用 PUTTY 或 XShell,本文的配置过程可能有 GUI 的配置方式。

全屏预览图片的动画和自适应布局

CSS HTML JavaScript innerHeight jQuery scrollTop 事件 兼容性 动画 横屏

本文探讨如何在Web浏览器中实现兼容性较好的全屏图片浏览控件, 即要支持绝大多数浏览器,适应不同分辨率的移动设备, 以及适应移动端的横屏、竖屏切换。

文中代码用于阐释原理和探讨机制,如果你在寻找拿来即用的第三方库, 请参考这些项目:

上一页 下一页