资讯专栏INFORMATION COLUMN

【Node Hero】1. 开始使用 Node.js

hqman / 2140人阅读

摘要:使用一个事件驱动的非阻塞式的模型,让它轻量而高效。也就是说提供了用编写服务器的可能性,这种服务器具有令人难以置信的性能。正如官方声明所说是一个使用与浏览器相同引擎的运行时。这意味着有两个发布版本稳定版和试验版。

本文转载自:众成翻译
译者:网络埋伏纪事
链接:http://www.zcfy.cc/article/1748
原文:https://blog.risingstack.com/node-hero-tutorial-getting-started-with-node-js/

这是 Node.js 系列教程 Node Hero 的第一篇文章。在这些章节中,将学习如何上手 Node.js 以及如何使用它交付软件产品。

本教程从基础开始 - 不需要以前有 Node.js 知识。本教程的目标是让你入门 Node.js,确保你可以理解如何用它来编写应用程序,所以如果有不清楚的,请马上问我们。

目录

开始使用 Node.js

使用 NPM

理解异步编程

第一个 Node.js 服务器

Node.js 数据库教程

Node.js request 模块教程

Node.js 项目结构教程

Node.js 身份验证 - 使用 Passport.js

Node.js 单元测试教程

调试 Node.js 应用程序

Node.js 安全教程

如何部署 Node.js 应用程序

监控 Node.js 应用程序

在第一篇教程中,将学习什么是 Node.js,如何在电脑上安装它,如何开始使用它 - 这样在下一章我们就可以做实际开发。我们开始吧!

Node.js 概述

官方 Node.js logo

Node.js 是一个建立在 Chrome 的 JavaScript 引擎 V8 之上的 JavaScript 运行时。Node.js 使用一个事件驱动的非阻塞式的 I/O 模型,让它轻量而高效。

也就是说:Node.js 提供了用 JavaScript 编写服务器的可能性,这种服务器具有令人难以置信的性能。正如官方声明所说:Node.js 是一个使用与 Google Chrome 浏览器相同 JavaScript 引擎 V8 的运行时。但是这还不足以支撑 Node.js 的成功 - Node.js 还使用了专注于异步 I/O 的多平台支持库 libuv。

官方 libuv logo

从开发者的观点来看,NodeJS 是单线程的 - 但是在幕后,它是用 libuv 来处理线程、文件系统事件、实现事件循环、使 Node.js 具有线程池特征 等等。大多数情况下,我们不会直接与它交互。

安装 Node.js

要得到最新的 Node.js 执行文件,可以访问 Node.js 官网:https://nodejs.org/en/download/。

用这种方法,很容易开始 - 但是如果以后要添加更多 Node.js 版本,最好是从使用 Node 的版本管理器 nvm 开始。

一旦安装了 NVM,就可以使用很简单的 CLI API 来与 Node.js 交互了。

安装 Node.js 版本
nvm install 4.4  

然后,如果想看看试验性版本:

nvm install 5  

要校验 Node.js 的启动和运行,请执行:

node --version  

如果一切顺利,就会返回当前活动的 Node.js 执行文件的版本号。

使用 Node.js 版本

如果正在开发一个支持 Node.js v4 的项目,可以用如下命令开始使用它:

nvm use 4  

然后可以用如下命令切换到 Node.js v5:

nvm use 5  

好了,现在我们知道了如何安装和在 Node.js 版本之间切换 - 但是这有何意义?

自从 Node.js 基金会成立,Node.js 就有一个发布计划。这与 Linux 基金会的其它项目很相似。这意味着有两个发布版本:稳定版和试验版。在 Node.js 中,带有长期支持(LTS)的稳定版是以偶数开始(4,6,8...),而试验版是从奇数开始(5, 7...)。我们推荐在生产环境中用 LTS 版本,而用试验版尝试新东西。

如果你的操作系统是 Windows,请使用 nvm-windows。

Hello World

要开始使用 Node.js,先在终端中试试!只需要键入 node,就可以启动 Node.js:

$ node
>

好了,下面我们试着打印点什么:

$ node
> console.log("hello from Node.js")

一旦敲了回车,就会得到下面这样的信息:

> console.log("hello from Node.js")
hello from Node.js  
undefined  

用这个界面随便玩玩 Node.js - 通常会在这里尝试点小代码片段,因为我不想把它们放到一个文件中。

*

是时候创建我们的 Hello Node.js 应用了!

首先创建一个 index.js 文件。打开 IDE(Atom、Sublime、Code 都行),创建一个新文件,然后存为 index.js。完成后,复制如下代码片段到该文件中:

// index.js
console.log("hello from Node.js")  

要运行该文件,只需再次打开终端,转到你存放 index.js 文件的目录,然后执行 node index.js 命令。你会看到它会生成与前面一样的输出 - 在终端上直接打印字符串。

模块化你的应用程序

现在你已经有了 index.js 文件,该升级一下游戏了!下面我们创建更复杂的应用,基于可读性和可维护性的目的,将源代码分成多个 JavaScript 文件。打开 IDE(Atom、Sublime、Code 都可以),创建如下目录结构(带有空文件),但是暂时忽略 package.json,我们将在下一步自动生成它:

├── app
|   ├── calc.js
|   └── index.js
├── index.js
└── package.json

每个 Node.js 项目都是从创建一个 package.json 文件开始 - 可以把它当作是应用程序及其依赖的 JSON 表示。它包含了应用程序的名称、作者,以及运行应用程序所需的所有依赖。我们打算在后面使用 NPM 一章中再讲解依赖。

可以在终端中使用 npm init 命令,以交互式的方式生成 package.json 文件。

键入回车后,会被要求给几个输入,比如应用程序的名称、版本、描述等等。不要担心,只管敲回车,直到得到了 JSON 片段,以及提问 is it ok?。最后一次敲回车,package.json 就被自动生成了,放在应用程序的文件夹中。如果在 IDE 中打开该文件,就会看到跟如下代码片段很相似的代码:

{
  "name": "@risingstack/node-hero",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "start": "node index.js"
  },
  "author": "",
  "license": "ISC"
}

package.json 添加一个 start 脚本是一个好实践 - 一旦你像上例一样这样做了,就可以用 npm start 启动应用。如果要把应用程序部署给 PaaS 提供者,那么就很方便了 - 它们会识别它,然后用它启动你的应用程序。

现在回到我们创建的第一个文件 index.js。我建议让这个文件保持很瘦 - 只请求应用程序本身(来自你之前创建的 /app 子目录下的 index.js 文件)。复制如下脚本到 index.js 文件,然后存盘:

// index.js
require("./app/index")  

现在到了开始创建实际应用程序的时候了。打开 /app 文件夹下的 index.js 文件,创建一个很简单的示例:数字数组相加。在本例中,index.js 会只包含我们要加的数字,执行计算的逻辑需要放在另一个模块中。

将如下脚本粘贴到 /app 目录下的 index.js 中。

// app/index.js
const calc = require("./calc")

const numbersToAdd = [  
  3,
  4,
  10,
  2
]

const result = calc.sum(numbersToAdd)  
console.log(`The result is: ${result}`)  

现在将实际的业务逻辑粘贴到同一文件夹下的 calc.js 文件中。

// app/calc.js
function sum (arr) {  
  return arr.reduce(function(a, b) { 
    return a + b
  }, 0)
}

module.exports.sum = sum  

要检查你是否成功,就保存这些文件,打开终端,键入 npm start 或者 node index.js。如果你所有东西都做对了,会得到答案:19。如果出错了,就仔细检查一下控制台日志,根据日志找到问题所在。

接下来

在下一章使用 NPM 中,我们会看看如何使用 JavaScript 的包管理器 NPM。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84984.html

相关文章

  • Node Hero】7. Node.js 项目结构

    摘要:本教程会学习如何正确组织一个项目的结构,从而在应用程序开始增长时避免混乱。项目结构的五个基本规则组织项目有不少可能的方式并且每种已知的方式都有其兴衰。过去在,我们有机会创建各种规模的高效应用程序,也获得了大量关于项目结构注意事项的见解。 本文转载自:众成翻译译者:网络埋伏纪事链接:http://www.zcfy.cc/article/1756原文:https://blog.rising...

    张红新 评论0 收藏0
  • Node Hero】5. Node.js 数据库教程

    摘要:是一种设计用于关系型数据库的查询语言。另一方面,数据库在最近十年变得相当流行。大多数数据库都有驱动程序可以用,它们在上也有库。我们已经完成了在中使用数据库所必须知道的所有基础知识。 本文转载自:众成翻译译者:网络埋伏纪事链接:http://www.zcfy.cc/article/1751原文:https://blog.risingstack.com/node-js-database-t...

    Hujiawei 评论0 收藏0
  • Node Hero】3. 理解异步编程

    摘要:异步编程在传统编程实践中,大多数操作都是同步发生的。中的异步编程异步是一种输入输出处理的形式,它允许在传输完成之前,其它处理能继续进行。 本文转载自:众成翻译译者:网络埋伏纪事链接:http://www.zcfy.cc/article/1759原文:https://blog.risingstack.com/node-hero-async-programming-in-node-js/ ...

    kevin 评论0 收藏0
  • Node Hero】2. 使用 NPM

    摘要:网站和使用同样的注册库来显示模块以及查找模块。使用在上一章开始使用中,当创建文件时,已经遇到了。此外,全局命名空间只包含公共模块。通过引入作用域包来解决此问题。下一步异步编程下一章学习使用回调和实现异步编程的原理。 本文转载自:众成翻译译者:网络埋伏纪事链接:http://www.zcfy.cc/article/1749原文:https://blog.risingstack.com/n...

    CarterLi 评论0 收藏0
  • Node Hero】8. 使用 Passport.js 进行 Node.js 身份验证

    摘要:本文转载自众成翻译译者网络埋伏纪事链接原文本教程中将学习如何使用和实现一个本地身份验证策略。我们将有一个用户页,一个备注页,和一些与身份验证相关的功能。下一步下一章主要涉及应用程序的单元测试。你会学习单元测试测试金字塔测试替代等概念。 本文转载自:众成翻译译者:网络埋伏纪事链接:http://www.zcfy.cc/article/1755原文:https://blog.risings...

    CoderStudy 评论0 收藏0

发表评论

0条评论

hqman

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<