本文自theprojectspot.com翻译而来,文章原作者为Lee Jacobson, 已经作者授权翻译用于非商业用途。原文地址:猛戳这里进入

介绍

这是我的关于Node.js系列入门教程的第一篇。必须说明一下,我并不是Node.js的专家,但是尝试向别人解释这是怎么回事是自我学习的一个好方法。如果你发现有些地方并不是那么正确,请提出来让我知道以便修正,谢之。

最近Node.js如此流行,到处是讨论这个的话题,我决定一探究竟学学这玩意儿。软件行业技术更新如此之快,如果落在后面是很危险滴(汗,这哥们 才20岁出头,就有这么强的落后于时代的危机感)。如果你不想落后于时代,不想失业,学习新的编程语言更新自己的技能是作为程序员非常重要的一件事情。如 果你不能认真对待此事,想想那些菜鸟新程序员不能找到工作的悲惨境地吧。

好了,闲话少说,进入正题(铛铛铛铛)。

Node.js是一个服务器端JavaScript实现。这意味着所有Javascript的牛B特性都能在Node.js里得到支 持,同样意味着如果你以前有JavaScript编程经验的话,你学习Node.js将占有极大的优势。Node.js刚出现没几年,哪怕是一直用这个东 西工作的,也只是几年,对比C这些古老语言有这么多人在用,这玩意没多少人会,如果你会的话,比单纯php程序员的竞争力要提高不少吧?(作者观点,用 php的同学不要在评论里骂我。。。)

开始Hello World吧

让我们来开始写第一个Hello Wrold程序,首先到http://www.nodejs.org 去下载并安装node.js。安装好之后,用你喜欢的文本编辑器创建一个JavaScript文件,内容如下:

console.log("Hello World");

保存为"hello.js" ,并且在终端里用如下命令运行程序:

node hello.js

现在你应该在终端里看到金光闪闪的“Hello World”两个大字了。如果只想看到这两个字,那么到这里就完了,不过我相信你更想看到在浏览器里怎么看到这两个字,好吧,打开你刚才创建的hello.js这个文件,重新编辑如下:

    var http = require('http');http.createServer(function (request, response) {response.writeHead(200, {'Content-Type': 'text/plain'});response.end('Hello World\n');}).listen(8080);console.log('Server started');

保存文件然后执行:

node hello.js

终端里应该看到“Server started”,用浏览器打开http://localhost:8080,我操,金光闪闪的“Hello World”出现在浏览器里了。

让我们来回顾一下我们刚才写的代码。

第一行是获取一个http组件并赋值给变量"http",http是Node.js的内置组件, 方便我们创建Node.js应用的东东。

我们可以通过调用Node.js的http组件的"createServer"方法来创建一个http服务, 这个方法返回一个对象,并且需要一个函数作为参数。

调用返回对象的方法listen来侦听端口,参数值就是你需要侦听的端口数值,这也是刚才为什么我们要用http://localhost:8080去请求的原因,代码里指定了这个端口。

我们还创建了一个函数作为参数传入createServer,在JavaScript编程中这是一个常用的做法,函数可以像变量或者对象一样作为参 数传入别的方法。当我们创建的http服务每次接收到从8080端口过来的请求时,执行传入的函数,而我们传入的函数称之为匿名函数,因为我们没有给它命 名。

你可能注意到作为参数的匿名函数有两个参数,"request"和"response",这两个参数由http服务在接收到请求时传入,它们都是对象,request用于获取请求内容,response用于我们返回相关信息。

在这个匿名函数中,第一件事是调用response的writeHead函数设置将要返回的http状态(200成功,403无权限,500异常,等等),同时设置Content-Type头,告诉浏览器我们返回的是纯文本。

接下来我们利用response对象输出金光闪闪的Hello World了,这里我们只是简单地调用response的write方法然后结束,所以用response的end来结束本次响应。

让我们的响应更有趣一点

就算我不断加上"金光闪闪"的定语,也无法掩饰Hello World是一个无聊的程序(好吧,所有程序员都是通过写一个无聊的程序开始的...), 让我们来写一个稍微不那么无聊的程序:用户计数器。用Node.js创建一个用户计数器巨简单,甚至不像php一样可能需要数据库。(原文如此,事实上别 的技术也可以不需要数据库之类的,利用全局会话等来实现,作者的意思可能是直接可以使用变量计数,但下文的变量在请求之外,相当于一个全局变量)。

创建一个叫counter.js的文件,并写入:

    var http = require('http');var userCount = 0;http.createServer(function (request, response) {console.log('New connection');userCount++;response.writeHead(200, {'Content-Type': 'text/plain'});response.write('Hello!\n');response.write('We have had '+userCount+' visits!\n');response.end();}).listen(8080);console.log('Server started');

然后运行之:

node counter.js

这时候访问http://localhost:8080,你就可以看到访问次数,刷新这个数字会增长。

注:你可能会看到一个奇怪的现象,每刷新一次,数值增加是2而不是1,这是因为你的浏览器同时请求了http://localhost:8080/favicon.ico。

你可以在终端的输出看到每次请求的情况。

这个程序的主要功能就是先定义一个userCount的变量,然后每次接收到请求时+1,并输出到浏览器。

在PHP里你要实现相同功能的话,需要保存信息到类似文本或者数据库的东西里面去。(又黑PHP...)

转自:http://www.laonan.net/blog/63/

补充:

Hello World
好了,让我们开始实现第一个 Node.js 程序吧。打开你常用的文本编辑器,在其中输入:

console.log('Hello World');

将文件保存为 helloworld.js,打开终端,进入 helloworld.js 所在的目录,执行以下命令:

node helloworld.js

如果一切正常,你将会在终端中看到输出 Hello World 。很简单吧?下面让我们来解释一下这个程序的细节。 console 是 Node.js 提供的控制台对象,其中包含了向标准输出写入的操作,如 console.log 、 console.error 等。 console.log 是我们最常用的输出指令,它和 C 语言中的 printf 的功能类似,也可以接受任意多个参数,支持 %d 、 %s 变量引用,例如:

//consolelog.js
console.log('%s: %d', 'Hello', 25);

输出的是 Hello: 25。

小技巧——使用 supervisor
如果你有 PHP 开发经验,会习惯在修改 PHP 脚本后直接刷新浏览器以观察结果,而你在开发 Node.js 实现的 HTTP 应用时会发现,无论你修改了代码的哪一部份,都必须终止Node.js 再重新运行才会奏效。这是因为 Node.js 只有在第一次引用到某部份时才会去解析脚本文件,以后都会直接访问内存,避免重复载入,而 PHP 则总是重新读取并解析脚本(如果没有专门的优化配置)。Node.js的这种设计虽然有利于提高性能,却不利于开发调试,因为我们在开发过程中总是希望修改后立即看到效果,而不是每次都要终止进程并重启。

supervisor 可以帮助你实现这个功能,它会监视你对代码的改动,并自动重启 Node.js。使用方法很简单,首先使用 npm 安装 supervisor:

npm install -g supervisor

如果你使用的是 Linux 或 Mac,直接键入上面的命令很可能会有权限错误。原因是 npm
需要把 supervisor 安装到系统目录,需要管理员授权,可以使用

sudo npm install -g supervisor

命令来安装。

接下来,使用 supervisor 命令启动 app.js:

supervisor app.js

Node.js入门 - 永恒的Hello World!相关推荐

  1. node.js入门 - 9.api:http

    node一个重要任务是用来创建web服务,接下来我们就学习与此相关的一个重要的api -- http.我们使用http.createServer()创建一个http服务的实例,用来处理来自客户的请求. ...

  2. 《Node.js入门》Windows 7下Node.js Web开发环境搭建笔记

    最近想尝试一下在IBM Bluemix上使用Node.js创建Web应用程序,所以需要在本地搭建Node.js Web的开发测试环境. 这里讲的是Windows下的搭建方法,使用CentOS 的小伙伴 ...

  3. js读取http chunk流_极简 Node.js入门 教程双工流

    点击上方蓝字关注我们 小编提示: 本文是由 ICBU 的谦行小哥哥出品,我们会持续发出极简 Node.js入门 教程,敬请期待哦,文中有比较多的演示代码建议横屏阅读 双工流就是同时实现了 Readab ...

  4. Node.js 入门知识点总结

    Noed.js 快速入门 前言 node.js 入门 环境配置 hello node.js node.js 获取参数 node.js 模块系统 node.js 路由 node.js 文件操作 使用 n ...

  5. node.js入门 - 7.异常处理与多进程开发

    node.js入门 - 7.异常处理与多进程开发 参考文章: (1)node.js入门 - 7.异常处理与多进程开发 (2)https://www.cnblogs.com/softlover/arch ...

  6. node.js 入门 (1)

    node.js 入门 (1) 一.node.js 是什么? 二.node.js 有那些特点? 三.node.js 安装种配置 安装方式 1:安装单个 node 版本(不推荐) 安装方式 2:安装多个 ...

  7. Node.js 入门教程 23 使用 npm 的语义版本控制 24 卸载 npm 软件包 25 npm 全局或本地的软件包

    Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录 Node.js 入门教程 23 使用 npm 的语义版本控制 24 ...

  8. Node.js 入门手册:那些最流行的 Web 开发框架

    这篇文章与大家分享最流行的 Node.js Web 开发框架.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编 ...

  9. Node.js 入门教程 6 V8 JavaScript 引擎

    Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录 Node.js 入门教程 6 V8 JavaScript 引擎 6 ...

最新文章

  1. 如何把不同尺寸ico格式图标_还在为图标设计犯难?这篇告诉你图标设计so easy!...
  2. s5pv210启动debian出错提示bash: cannot set terminal process group (-1): Inappropriate ioctl for device...
  3. [杂笔]我的第一篇博客
  4. java final关键字_终于明白 Java 为什么要加 final 关键字了!
  5. 架构设计中服务层的简单理解
  6. 小创业项目组的管理和实践:快速迭代的思考
  7. [翻译] TWRPickerSlider
  8. 算法 --- 翻转二叉树
  9. 软件设计的火花——Brooks新作及《人月神话》三十五周年讨论会纪要
  10. ubuntu gedit出错:Failed to connect to the session manager
  11. 计算机网络——报文格式
  12. 千年后,邂逅属于你的游园梦:华为带给智慧园区的生态鼎新
  13. 树上战争(HDU - 2545)
  14. 吉特仓库管理系统- 斑马打印机 ZPL语言的腐朽和神奇
  15. asp使用js时间控件,实现下拉日历 解决UTF-8和GB2312的编码问题
  16. 看板的作用是什么?任务看板如何跟进
  17. android ui设计 知乎,界面设计进化!知乎日报2.0新版发布下载
  18. 星标3.8k,一款轻量级、高性能的分布式监控系统,功能强大
  19. 思科ACS5.8最新搭建教程-亲测可用
  20. 最简单的基于FFmpeg的解码器-纯净版(不包含libavformat)

热门文章

  1. 牛的旅行(信息学奥赛一本通-T1343)
  2. 5 WM配置-主数据-定义存储类型(Storage Type)
  3. 9 WM层面 临时仓储类型的仓位 主数据不存在
  4. python爬去百度百科词条_Python爬虫入门学习实践——爬取小说
  5. python除了爬虫还做什么_python除了爬虫还可以做什么
  6. 软件需求说明书谁负责写_新手入门软件测试需要掌握哪些知识点?
  7. oracle crf路径,说说 ora.crf 那些事
  8. python怎么打包_如何打包python程序
  9. C++:遍历指定路径下的文件/图片
  10. linux 如何查看进程内用户虚拟空间分布