`

[Node.js] 学习笔记 - right design for your modules

阅读更多
http://fredkschott.com/post/2013/12/node-js-cookbook---designing-singletons/

Private vs. Public
When creating a new module, your variables and functions are kept private by default. You’ll need to use module.exports to define your interface and make them public. This is a strait-forward process: whatever you set to module.exports becomes public, and is visible when your module is required.

Your goal when designing modules should be to keep as much code private as possible, and only export what needs to be referenced by the rest of your application. Public functions can still reference private variables and functions, so there’s no harm in being conservative when choosing between the two.

You should be able to look in one place to see exactly what’s public, what’s private, and what the hell is going on. Kill two birds with one stone: define AND export your public variables at the same time. You’ll have an explicit separation of private and public as well as a complete picture of your public interface, instead of constantly searching your code base to find which functions are being exported.
// Private
var b = 2;
function sum(x, y) {
  return x + y;
}
function isXEqualTo5() {
  return (module.exports.x == 5);
}

// Public
module.exports = {
  x: 5,
  add2: function(num) {
      return sum(b, num);
  },
  addX: function(num) {
      return sum(module.exports.x, num);
  }
}
 


Avoiding the Exports Alias
A seasoned Node veteran will know there’s a second way to export your code. exports is an alias to module.exports, which you can use instead to save yourself a few characters. But be careful: it’s just an alias. Setting individual properties works fine, but if you set the entire exports or module.exports object (as we do above) you’ll break the connection between the two and it will no longer work.

If you have the same singleton code in two different files, Node will treat these as two separate modules. If they’re completely stateless this is fine, but if you’re not careful it can cause some major headaches down the road. Make sure you keep your code in a single place so that require can cache it correctly.

分享到:
评论

相关推荐

    SQLite3-bindings-for-Node.js-node-sqlite3.zip

    SQLite3_bindings_for_Node.js_node-sqlite3.zip SQLite3_bindings_for_Node.js_node-sqlite3.zip SQLite3_bindings_for_Node.js_node-sqlite3.zip SQLite3_bindings_for_Node.js_node-sqlite3.zip SQLite3_bindings...

    node-v18.16.0-win-x64

    Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型, [1] 让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、...

    Node.js(node-v16.15.1-x64.msi)

    Node.js 应用程序是用 JavaScript 编写的,可以在 Mac OS X、Windows 和 Linux 上的 Node.js 运行时中运行而无需更改。 Node.js 应用程序旨在最大限度地提高吞吐量和效率,使用非阻塞 I/O 和异步事件。Node.js 应用...

    node-v16.20.0-darwin-x64.tar.gz

    Node.js 是一个强大的开源开发平台,它允许开发者使用 JavaScript 编程语言进行服务器端编程,打破了 JavaScript 仅限于浏览器的局限。这个标题 "node-v16.20.0-darwin-x64.tar.gz" 提供了关于 Node.js 版本和操作...

    node.js 安装包 10.16.3-x64

    Node.js 是一个开源、跨平台的JavaScript运行环境,它允许开发者在服务器端执行JavaScript代码,极大地拓宽了JavaScript的应用领域。10.16.3-x64 版本是 Node.js 的一个稳定版本,适用于64位操作系统。下面将详细...

    node-v16.15.1-win-x64.zip

    9. **社区支持**:Node.js拥有庞大的开发者社区,提供了无数的开源项目和教程,为初学者和资深开发者提供了丰富的学习资源和解决问题的途径。 总结来说,Node.js v16.15.1-win-x64是一个强大的服务器端JavaScript...

    node.js-for-windows-32位及64位

    Node.js 是一个开源的、跨平台的 JavaScript 运行环境,它允许开发者在服务器端运行 JavaScript 代码。这个“node.js-for-windows-32位及64位”压缩包包含了适用于Windows操作系统32位和64位系统的Node.js安装文件,...

    Node.js Design Patterns Second Edition[July 2016]

    You will learn, for example, how different traditional design patterns look in Node.js, or how to design modules that do only one thing. A set of patterns to solve common Node.js design and coding ...

    node-v14.15.0-win-x64.zip

    Node.js是一款开源、跨平台的JavaScript运行环境,它允许开发者在服务器端执行JavaScript代码,极大地拓展了JavaScript的应用领域。这个版本号遵循 Semantic Versioning(语义化版本)规范,其中14是主版本号,15是...

    node-v16.16.0-win-x64.zip

    Node.js 是一个强大的开源、跨平台的JavaScript运行环境,它允许开发者在服务器端运行JavaScript代码。这个环境由Ryan Dahl在2009年创建,它的核心特性是利用非阻塞I/O模型,使得Node.js非常适合构建高效、可扩展的...

    Node.js-hexo-theme-material一个Hexo的Material主题

    【标题】"Node.js-hexo-theme-material" 指的是基于 Node.js 框架的 Hexo 内容管理系统所使用的 Material Design 风格的主题。Hexo 是一个快速、简洁且高效的静态站点生成器,它允许用户通过 Markdown 语言编写博客...

    node-v16.14.0-win-x64.zip

    Node.js是一款开源、跨平台的JavaScript运行环境,它允许开发者在服务器端执行JavaScript代码,极大地扩展了JavaScript的应用范围,不再局限于浏览器环境。 Node.js的核心特性包括事件驱动、非阻塞I/O模型,这些...

    node-v14.17.1-win-x64

    Node.js是一款开源、跨平台的JavaScript运行环境,它允许开发者在服务器端运行JavaScript代码,极大地扩展了JavaScript的应用范围。14.17.1是Node.js的稳定版本之一,提供了许多性能优化和新特性。 描述中提到,...

    node-v12.14.1-win-x64.zip

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够使用 JavaScript 来进行服务器端编程。Node.js 提供了一个开放源代码、跨平台的环境,可以构建网络应用和服务。"node-v12.14.1-win-x64....

    nodejs(node-v16.13.2-x64.msi)-(node-v18.12.1-x64.msi)

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程,极大地扩展了 JavaScript 的应用范围。Node.js 的设计思想是事件驱动、非阻塞I/O模型,这使得它在...

    node-v16.15.0-win-x64.zip

    Node.js 是一个开源、跨平台的JavaScript运行环境,它允许开发者在服务器端运行JavaScript代码。这个环境基于Google的V8引擎,这意味着它能够高效地执行JavaScript,使得开发人员可以利用JavaScript的强大功能来构建...

    Node.js学习笔记.md

    Node.js学习笔记的知识点总结如下: 1. Node.js概念 - Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它使得JavaScript能够脱离浏览器环境在服务器端运行。 - 它使用了一个事件驱动、非阻塞I/O模型,使其...

    node-v12.18.3-x64_nodejs_Node.js_

    描述中提到的“Node JS library installer for windows 64 bit”表明这是一个专为Windows 64位系统设计的Node.js库安装程序。这个安装程序将帮助用户在64位Windows操作系统上安装和配置Node.js环境,以便开发和运行...

    基于Node.js的nyaa-nodejs-demo项目设计源码

    该项目为基于Node.js的nyaa-nodejs-demo项目设计源码,涵盖151个文件,其中包括40个C++头文件、35个构建脚本文件、35个...项目采用C++、C和JavaScript等多种编程语言,适合对Node.js有深入研究的开发者进行学习和参考。

Global site tag (gtag.js) - Google Analytics