使用 systemd 管理 Node.js应用

MongoDB Node.js Redis systemd

systemd 是 Linux 下的一款系统和服务管理器, 该软件的初衷是提供精确的服务间依赖,以此支持并行启动来提高性能。 越来越多的Linux发行版都由sysvinit迁移到了systemd(包括Debian!)。 在这些Linux系统中,用原生的systemd来托管Node.js进程足够满足一般开发者的要求。 借由systemd可以很方便地处理依赖关系和监测日志。

systemctl

systemctl是查询和控制systemd的主要命令,下面以mongod为例介绍常用参数:

MongoDBNode.js下非常常见的NoSQL数据库,在ArchLinux下通过pacman安装:pacman install mongodb,安装成功后mongod即为可用的systemd服务。

# 查看服务状态
systemctl status mongod
# 启动服务
systemctl start mongod
# 停止服务
systemctl stop mongod
# 重启服务
systemctl restart mongod
# 设为自启动
systemctl enable mongod
# 取消自启动
systemctl disable mongod

404 错误处理:重定向还是接 404?

AJAX HTML HTTP JavaScript 搜索引擎

常见的 HTTP 服务器(比如 Spring、Express、Django,甚至 nginx) 一般都会提供自定义错误页面的方式。 也就是说当 4xx、5xx 错误发生时,服务器直接返回配置好的错误页面,隐藏原始的错误信息。 不恰当地配置这些页面有时会产生非常坏的影响,本文以 404 为例对比不同的处理方式:

  • 返回包含 404 内容的页面,同时给出 404 状态码。比如 Google、Github、Facebook、Amazon、Linkedin。
  • 重定向(302/303)至统一的 URL,该 URL 给出具有 404 信息的页面。比如百度、淘宝、腾讯。

ES6生成器:可迭代协议与迭代器协议

JavaScript 迭代器 生成器 ES6

ES6(ECMAScript 2015)中提出了生成器的概念,进一步完整了JavaScript语言。 本文介绍了可迭代协议与迭代器协议的概念区别,以及生成器的声明与使用方法。

生成器函数

生成器函数是用来返回生成器的函数,生成器是一种有状态的迭代器, 可实现较复杂的迭代行为,比如生成ID。 生成器函数使用function*语法来定义:

function* idMaker(){
    var index = 0;
    while(index<3){
        yield index++;
    }
}

生成器函数也可以通过GeneratorFunction(类似Function)、function* expression来定义(可以使用匿名函数)。

在mongoose中填充外键

JavaScript MongoDB NoSQL 引用 数组 集合 数据库 mongoose

MongoDB是典型的NoSQL数据库,因此不提供JOIN操作。 但有时我们仍然希望引用其他集合中的文档。此时便需要外键填充(population)。 mongoose是极具JavaScript特点的程序库,提供了极其简单和强大的填充功能。 mongoose不仅支持填充单个文档,也支持多文档,甚至直接填充某个对象。

本文中部分代码来自mongoose文档

外键引用

在Schema字段的定义中,可以添加ref属性来指向另一个Schema。 该ref属性在此后被填充(populate)时将被mongoose读取。 下面是存在互相引用的PersonStory的Schema定义。

var mongoose = require('mongoose'), Schema = mongoose.Schema
  
var personSchema = Schema({
  // _id默认为Schema.Types.ObjectId类型
  _id     : Number,
  name    : String
});

var storySchema = Schema({
  creator : { type: Number, ref: 'Person' },
  title    : String,
  // 可以看到外键引用可以定义在嵌套的属性中。
  fans     : [{ type: Number, ref: 'Person' }]
});

var Story  = mongoose.model('Story', storySchema);
var Person = mongoose.model('Person', personSchema);

利用 Sinonjs 构建测试桩:Spies and Stubs

事件 异常 类型检查 测试 Mocha 测试桩 Mock

利用 Mocha 进行 BDD 风格测试一文中介绍了Mocha测试框架的使用, 其中略过了before(), beforeEach()等钩子。 本文介绍在Mocha下如何利用这些钩子构建测试上下文, 以及如何使用Sinonjs构建测试桩。

Sinonjs

事实上Sinonjs提供了三种测试桩:Spies, Stubs, Mocks。 以及一些虚拟环境:Timers、JSONP、XHR等。 本文着重介绍如何利用Spies和Stubs的使用。

文档:

安装:

npm install --save-dev sinon

上一页 下一页