《Node学习指南》一1.2 开始Node开发

简介:

本节书摘来自异步社区《Node学习指南》一书中的第1章,第1.2节,作者【美】Shelley Powers,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.2 开始Node开发

Node学习指南
现在你已经安装了Node,是时候开始编写第一个Node应用程序了。

1.2.1 Hello, World in Node

为了测试新的开发环境、语言或者工具,第一个写出来的程序往往是“Hello,World”。我们同样也将使用Node创建一个“Hello,World”程序,它仅仅简单的向访问它的用户输出问候语。

示例1-1包含了使用Node创建Hello,World程序需要的全部文本代码。

示例1-1 Node版Hello, World


8007141729597d67509ed4552c44cb35c5e2a05b

代码被保存在名为helloworld.js的文件中。作为服务端开发使用的Node,其代码既不冗长,也不模糊。即使是一个不曾接触过Node的人,也可以直观地看出代码所表达的意思。不过可能最吸引人的是,它采用了我们很熟悉的JavaScript语言编写程序。

可以在Linux系统中使用命令行,或在Mac OS中使用终端窗口,或在Windows中使用命令窗口,运行如下命令来启动示例程序:

node helloworld.js

在程序成功运行后,会输出如下信息:

Server running at 8124

现在,你应该可以使用任何浏览器访问站点了。如果应用程序是在本地机器上运行的,可以使用localhost:8124。如果是在远程机器上运行的,需要使用远程机器的URL并访问8124端口。在浏览器中,一个显示有“Hello,World!”内容的页面将会被显示出来。到目前为止,你已经成功创建了第一个完整的并且可以正常工作的Node应用程序了。

警告:
如果是在Fedora系统中安装Node环境,需要留意Node会被重命名,以避免与系统中现有功能的冲突。更多详细信息请查阅http://nodejs.tchol.org/
由于我们没有在node命令后使用&(使应用程序在后台运行),在程序启动后,你就不能返回到命令行了。不过你依然可以继续正常访问应用程序,并且同样的信息会被显示在浏览器窗口中,直到你使用Ctrl+C来停止程序,或使用kill命令来中止node进程。

如果想在后台运行应用程序,在Linux系统中可以使用如下命令:

node helloworld.js &

之后,你需要通过“ps–ef”命令找到进程对应的ID,然后使用kill命令手动关闭该进程(比如进程ID为3747):

ps -ef | grep node
kill 3747

如果你退出终端窗口,node进程同样也会中止。

提示:
在第16章中,我会讨论如何创建一个可持久的Node应用程序安装。
你不能启动另外一个监听同一端口的Node应用程序:因为在同一时间、同一端口上,只能运行一个Node应用程序。如果你的Apache工作在端口80上,你也不能在该端口上启动Node应用程序。你必须为每一个应用使用不同的端口号。

如果你在使用WebMatrix的话,也可以将helloworld.js作为一个新文件添加到之前生成的WebMatrix站点项目中。你只需要打开站点,从菜单中选择“New File…”选项,然后将示例1-1中的代码输入到创建的文件中,点击运行按钮。

警告:
WebMatrix会覆盖Node程序中使用的端口号。当你运行应用程序后,你只能通过项目中定义好的端口访问站点,而不能使用在http.Server.listen方法中指定的端口。

1.2.2 分析“Hello,World”

我会在后续章节对Node应用程序进行更多剖析。但是现在,我们先来仔细看看“Hello, World”程序。

在示例1-1中,第一行代码是:

var http = require('http');

Node中的许多功能通过外部程序或库来提供,我们叫它模块(modules)。这句代码其实就是用来加载HTTP模块,然后指派给一个本地变量。HTTP模块能提供基本的HTTP功能,可以让应用程序支持对网络的访问。

下一句代码是:

http.createServer(function (req, res) { ...

在这行代码中,使用了createServer方法创建了一个新的服务器,并且传递了一个匿名函数来作为该方法时的参数。这个匿名函数就是requestListener函数,它有两个参数:一个代表服务器收到的请求(http.ServerRequest),另一个代表服务器的响应(http.ServerResponse)。

在匿名函数中,有如下代码:

res.writeHead(200, {'content-Type': 'text/plain'});

在http.ServerResponse对象中有一个writeHead方法,我们用它来发送响应信息的HTTP头,并且指定了HTTP状态码(status code)为200,同时还提供了内容类型content-type。你同样可以通过headers对象来设置其他HTTP响应头中需要的信息,例如content-length或者connection:

{ 'content-length': '123',
 'content-type': 'text/plain',
 'connection': 'keep-alive',
 'accept': '*/*' }

writeHead的第二个可选参数是reasonPhrase,用来对状态码指定文本描述。

依据下面代码将“Hello,World!”内容放入响应信息中,并发送响应:

res.end("Hello, World!\n");

调用http.ServerResponse.end方法表示本次通信已经完成,所有响应信息的头和内容均已经被发送。注意:你必须为每一个http.SErverResponse对象使用该方法。

end方法有两个参数:

一个数据块,可以是一个字符串或者buffer对象;
如果数据块是字符串对象,第二个参数用于指定编码方式。
这两个参数都是可选的,而且只有在字符串是非utf8编码的情况下才需要指定第二个参数,因为其默认值是utf8。

我们也可以不在end方法中传递数据块,而使用另一个write方法:

res.write("Hello, World!\n");

然后:

res.end();

下面一句代码,表示了匿名函数和createServer函数的结束:

}).listen(8124);

http.Server.listen方法紧接在createServer之后调用,用于在指定端口(本例中为8124)监听接入的客户端连接。它的可选参数是一个hostname和一个回调函数。如果指定了hostname,客户端将能通过Web地址的形式访问服务端了,比如http://oreilly.com或者http://examples.burningbird.net

提示:
本章后半部分对callback函数有更多介绍。
listen方法是异步的,这意味着在应用程序等待客户端连接建立时,不会阻塞程序的执行。listen方法之后的所有代码都会被执行。而且当连接建立起来后,一个listening事件会被触发,传给listen方法的回调函数会被执行。

最后一句代码是:

console.log('Server running on 8124/');

console是一个起源于浏览器环境并被Node采用的众多对象之一,大多数JavaScript开发人员对它都很熟悉。在此处,它提供了将文本信息输出到命令行(或者开发环境)的功能,而不再是输出信息到客户端浏览器中。

相关文章
|
4月前
|
负载均衡 监控 JavaScript
pm2 工具在 Node.js 开发和部署中的重要作用
pm2 工具在 Node.js 开发和部署中的重要作用
56 0
|
11天前
|
JavaScript 前端开发 IDE
【TypeScript技术专栏】TypeScript与Node.js后端开发
【4月更文挑战第30天】TypeScript在Node.js后端开发中日益重要,作为JavaScript超集,它提供静态类型检查和面向对象编程,增强代码可靠性和维护性。集成TypeScript能带来类型安全、更好的IDE体验、易于维护的代码以及增强工具支持。通过安装TypeScript编译器、编写TypeScript文件、配置TSconfig,开发者可以在Node.js项目中利用其高级特性,提高代码质量和开发效率。实践案例显示,TypeScript能确保路由处理器的类型正确,降低错误率。随着社区发展,TypeScript成为提升Node.js开发体验的推荐选择。
|
15天前
|
JavaScript 前端开发 关系型数据库
node+vue3+mysql前后分离开发范式——实现视频文件上传并渲染
node+vue3+mysql前后分离开发范式——实现视频文件上传并渲染
25 1
|
15天前
|
JavaScript 前端开发 API
node+vue3+mysql前后分离开发范式——实现对数据库表的增删改查
node+vue3+mysql前后分离开发范式——实现对数据库表的增删改查
36 1
|
18天前
|
Web App开发 JavaScript 前端开发
js开发:请解释什么是Node.js,以及它的应用场景。
Node.js是基于V8引擎的JavaScript运行时,用于服务器端编程。以其事件驱动、非阻塞I/O模型著称,适用于高并发和实时应用。常见用途包括:构建Web服务器、实时应用(如聊天)、API服务、微服务、工具和命令行应用,以及搭配Electron开发桌面软件。
20 1
|
2月前
|
Web App开发 JavaScript 前端开发
js开发:请解释什么是Node.js,以及它的应用场景。
Node.js是基于V8的JavaScript运行时,用于服务器端编程。它的事件驱动、非阻塞I/O模型使其在高并发实时应用中表现出色,如Web服务器、实时聊天、API服务、微服务、工具和跨平台桌面应用(使用Electron)。适用于高性能和实时需求场景。
20 4
|
2月前
|
Web App开发 JavaScript 前端开发
深入浅出:Node.js 在后端开发中的应用与实践
【2月更文挑战第13天】本文旨在探讨Node.js这一流行的后端技术如何在现代Web开发中被应用以及它背后的核心优势。通过深入分析Node.js的非阻塞I/O模型、事件驱动机制和单线程特性,我们将揭示其在处理高并发场景下的高效性能。同时,结合实际开发案例,本文将展示如何利用Node.js构建高性能、可扩展的后端服务,以及在实际项目中遇到的挑战和解决方案。此外,我们还将讨论Node.js生态系统中的重要工具和库,如Express.js、Koa.js等,它们如何帮助开发者快速搭建和部署应用。通过本文的探讨,读者将获得对Node.js在后端开发中应用的深入理解,以及如何有效利用这一技术来提升开发效率
122 2
|
3月前
|
JavaScript iOS开发 MacOS
掌握NVM、NRM和NPM:Node.js开发的利器
掌握NVM、NRM和NPM:Node.js开发的利器
75 0
|
3月前
|
资源调度 JavaScript 开发工具
从npm慢如蜗牛到飞驰如光:nrm加速你的Node.js开发
从npm慢如蜗牛到飞驰如光:nrm加速你的Node.js开发
129 0
|
4月前
|
小程序
微信小程序|Springboot+Vue+Node开发实现医疗预约挂号系统(二)
微信小程序|Springboot+Vue+Node开发实现医疗预约挂号系统