Getting Node.js Apps Production Ready

部署程序需要知道的方面:

  • Environment variables
  • Express.js in production
  • Socket.IO in production(在线文章缺失这章)
  • Error handling
  • Node.js domains for error handling
  • Multithreading with Cluster
  • Multithreading with Cluster2
  • Event logging and monitoring
  • Building tasks with Grunt
  • Locking dependencies
  • Git for version control and deployments
  • Running tests in Cloud with TravisCI

Environment Variables

在部署到产品环境之前,需要准备好代码。私人的信息不要放入版本控制系统。

敏感信息如API keys,密码,数据库的URIs最好储存在环境变量内。不要放到源码中。

Node.js可以容易的存取这些环境变量:

console.log (process.env.NODE_ENV,
process.env.API_KEY,
process.env.DB_PASSWORD)

然后,在程序开始前, 设置这些变量:

$ NODE_ENV=test API_KEY=XYZ DB_PASSWORD=ABC node envvar.js

一般,这些环境变量设置是部署的一部分,或者operations setup。

下一章,我们在server内处理这些变量。


Express.js in Production

使用判断语法来检测NODE_ENV变量的值,根据值来使用不同层次的服务logs。

比如开发阶段,我们需要大量的信息,但是在产品阶段,stack和exceptions可能会导致攻击,所以:

const errorHandler = require('errorhandler')
if (process.env.NODE_ENV === 'development') {
app.use(errorHandler({
dumpExceptions: true,
showStack: true
}))
} else if (process.env.NODE_ENV === 'production') {
app.use(errorHandler())
}

process.env.NODE_ENV作为环境变量,可以在terminal(bash, zsh或者其他)设置。

环境变量的语法规则是:

KEY=VALUE
//或者在整个shell session时使用 export KEY=VALUE //例子
$ NODE_ENV=production node app.js

备注:

不是很立即本章给的代码。(https://github.com/azat-co/practicalnode/blob/master/chapter10/chapter10.md)


Error handler

Multithreading with Cluster

核心模块Cluster可以多线程处理系统load。

Event Logging and Monitoring

  1. Monitor via dashboard and health statuses (monitoring and REPL)
  2. Analyze postmortems after the events have happened (Winston and Papertrail)

Building Tasks with Grunt

It performs compilations, minifications, linting, unit testing, and other important tasks for automation.

A Brief on Webpack

和Grunt的功能类似。

module.exports = {
entry: "./jsx/app.jsx",
output: {
path: __dirname + '/js',
filename: "bundle.js"
},
// ... More configurations
}

见之前的博客:

webpack基础概念

https://www.cnblogs.com/chentianwei/p/9877570.html


Locking Dependencies

使用^或者*, 或者在package.json内让version field空着,都会导致下载更高的版本,当你或谁执行npm install。

一个解决方案是,commit node_modules to git

因为即使我们锁定包A在我们的package.json内,很可能A内有一个*或者版本的范围。因此一旦更新,这个A module可能break system。

Commiting模块到你的版本控制系统。

Git for Version Control and Deployments

安装

生成SSH key.

创建本地仓库:


Running Tests in Cloud with TravisCI

使用云端跑测试。有不少选择。

Practical Node.js (2018版) 第10章:Getting Node.js Apps Production Ready的更多相关文章

  1. Practical Node.js (2018版) 第7章:Boosting Node.js and Mongoose

    参考:博客 https://www.cnblogs.com/chentianwei/p/10268346.html 参考: mongoose官网(https://mongoosejs.com/docs ...

  2. Practical Node.js (2018版) 第5章:数据库 使用MongoDB和Mongoose,或者node.js的native驱动。

    Persistence with MongoDB and Mongoose https://github.com/azat-co/practicalnode/blob/master/chapter5/ ...

  3. Practical Node.js (2018版) 第9章: 使用WebSocket建立实时程序,原生的WebSocket使用介绍,Socket.IO的基本使用介绍。

    Real-Time Apps with WebSocket, Socket.IO, and DerbyJS 实时程序的使用变得越来越广泛,如传统的交易,游戏,社交,开发工具DevOps tools, ...

  4. Practical Node.js (2018版) 第3章:测试/Mocha.js, Chai.js, Expect.js

    TDD and BDD for Node.js with Mocha TDD测试驱动开发.自动测试代码. BDD: behavior-driven development行为驱动开发,基于TDD.一种 ...

  5. Practical Node.js (2018版) 第8章:Building Node.js REST API Servers

    Building Node.js REST API Servers with Express.js and Hapi Modern-day web developers use an architec ...

  6. Practical Node.js (2018版) 第4章: 模版引擎

    Template Engines: Pug and Handlebars 一个模版引擎是一个库或框架.它用一些rules/languages来解释data和渲染views. web app中,view ...

  7. Vue.js 学习笔记 第1章 初识Vue.js

    本篇目录: 1.1 Vue.js 是什么 1.2 如何使用Vue.js 本章主要介绍与Vue.js有关的一些概念与技术,并帮助你了解它们背后相关的工作原理. 通过对本章的学习,即使从未接触过Vue.j ...

  8. Node入门教程(7)第五章:node 模块化(下) npm与yarn详解

    Node的包管理器 JavaScript缺少包结构的定义,而CommonJS定义了一系列的规范.而NPM的出现则是为了在CommonJS规范的基础上,实现解决包的安装卸载,依赖管理,版本管理等问题. ...

  9. Node入门教程(6)第五章:node 模块化(上)模块化演进

    node 模块化 JS 诞生的时候,仅仅是为了实现网页表单的本地校验和简单的 dom 操作处理.所以并没有模块化的规范设计. 项目小的时候,我们可以通过命名空间.局部作用域.自执行函数等手段实现变量不 ...

随机推荐

  1. Postman 进阶(pre-request scripts&test script)

    Postman 进阶 1. pre-request scripts   pre-request scripts是一个关联了收藏夹内request,并且在发送request之前执行的代码片段.这对于在r ...

  2. linux 逆向映射机制浅析

    2017-05-20 聚会回来一如既往的看了会羽毛球比赛,然后想到前几天和朋友讨论的逆向映射的问题,还是简要总结下,免得以后再忘记了!可是当我添加时间……这就有点尴尬了……520还在写技术博客…… 闲 ...

  3. 判断是手机请求还是pc请求

    网址 http://detectmobilebrowsers.com/ string u = Request.ServerVariables["HTTP_USER_AGENT"]; ...

  4. 【JVM】-NO.110.JVM.1 -【hsdis jitwatch 生成查看汇编代码】

    Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

  5. Eclipse集成scala插件

    1.Eclipse中右击help,选择Eclipse Marketplace,搜索scala,一路点击安装,重启Eclipse. 2.新建工程,new->other->出现scala wi ...

  6. JS关键字和保留字汇总(小记)

    ECMA-262 描述了一组具有特定用途的关键字.这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等.按照规则,关键字也是语言保留的,不能用作标识符.以下就是ECMAScript的全部关 ...

  7. Java基础(认识Java)

    我们要学习Java那么就要首先认识一下Java: Java是什么 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James ...

  8. 外网访问ARM嵌入式Linux系统

    外网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从外网也能访问ARM嵌入式Linux系统? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并 ...

  9. VMware中为Linux安装vm-tools

    1.虚拟机中选择安装VMware-tools,或者重新安装 2.在/mnt目录下建立cdrom文件夹 mkdir /mnt.cdrom 3.把/dev/cdrom光驱挂载到刚才建的文件夹上 mount ...

  10. SPOJ - AMR11E

    Arithmancy is Draco Malfoy's favorite subject, but what spoils it for him is that Hermione Granger i ...