什么是Node.js?

Node.js是一个基于Chrome的V8 JavaScript引擎构建的开源,轻量级和高效的JavaScript运行时。它的设计没有线程(单线程),并且与Twisted类似,后者是一个使用Python或Event Machine构建的网络引擎,这是一个用于Ruby程序的事件处理库。

Node.js的核心是基于事件驱动的编程;因此,程序员应该了解可用的事件以及如何响应它们。

Node.js下的包管理

Node.js使用名为“npm”的JavaScript包管理器和生态系统,其中包含大量免费的开源库。它支持模块化软件开发。您可以使用它来安装Node包,共享,分发代码和管理包依赖关系。

为什么Node.js很重要?

Node.js是一个强大的,因此很重要,原因如下:

  • 它使用异步事件驱动的非阻塞I/O执行模型,可提高应用程序的吞吐量并支持实际Web应用程序的可伸缩性。
  • 它是单线程的,因此在任何给定时间它只能使用1个CPU。
  • node.js Web应用程序是一个完整的Web服务器,例如Nginx或Apache。
  • 它通过**child_process.fork()**支持线程,用于生成子进程,还提供了一个集群模块。

通过这个简短的介绍,您可能急于编写您的第一个JavaScript程序。但是,首先,您需要使用以下指南在Linux系统上安装Node.js和NPM软件包。

如何在Linux中创建您的第一个Node.js应用程序

一旦安装了Node.js,就可以开始了。首先创建一个存储应用程序文件的目录。

$ sudo mkdir -p /var/www/myapp

然后进入该目录并为您的应用程序创建package.json文件。 此文件有助于作为项目的小文档:项目名称,作者,依赖的包列表等。

$ cd /var/www/myapp
$ npm init

这将询问您一些问题,只需按照下面的说明进行回答,然后按[Enter]。 请注意,package.json中最重要的事情是名称和版本字段,如下所述。

  • package name - 您的应用名称,默认为目录名称。
  • version - 您的应用程序的版本。
  • description - 为您的应用编写简短说明。
  • entry point - 设置要执行的默认包文件。
  • test command - 用于创建测试脚本(默认为空脚本)。
  • git repository - 定义一个Git存储库(如果有的话)。
  • keywords - 设置关键字,对于其他用户在npm上识别您的包很重要。
  • author - 指定作者姓名,在此处输入您的姓名。
  • license - 为您的应用/包指定许可证。

接下来,创建一个server.js文件。

$ sudo nano server.js

复制并粘贴下面的代码。

var http = require('http');
http.createServer(function(req,res){
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World!www.linuxidc.com');
}).listen(8080);
consol.log('Server started on localhost:8080; press Ctrl-C to terminate...!');

接下来,使用以下命令启动应用程序。

$ node server.js

或者

$ npm start

接下来,打开Web浏览器并访问您的Web应用程序,该应用程序将打印字符串“Hello World!www.linuxidc.com”,使用地址:

http://localhost:8080

从浏览器访问Nodejs应用程序

在上面的代码中,正在处理的主要事件是通过HTTP模块的HTTP请求。

Nodejs HTTP模块

在Node.js中,模块更像是JavaScript库,它们包含可以在应用程序中重用的函数。 您可以使用内置模块,30个party模块或创建自己的模块。

要在应用程序中调用模块,请使用require函数,如图所示。

var http = require('http');

一旦包含http模块,它将创建一个侦听特定端口的服务器(在此示例中为8080)。 http.creatServer方法创建实际的http服务器,该服务器接受一个函数(在客户端尝试访问应用程序时调用)作为参数。

http.createServer(function(req,res){
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World!www.linuxidc.com');
}).listen(8080);

http.createServer中的函数有两个参数:req(request)和res(response)。 req参数是来自用户或客户端的请求,res参数向客户端发送回复。

res.writeHead(200, { 'Content-Type': 'text/plain' }); #这是响应HTTP标头
res.end('Hello World!www.linuxidc.com');

一旦服务器启动,代码的最后部分就会将输出发送到控制台。

consol.log('Server started on localhost:8080; press Ctrl-C to terminate...!');

Node.js中的路由

在本节中,我将解释Node.js编程中称为路由的最重要概念之一(与计算机网络下的路由相似:在网络中查找路径的过程)。

这里,路由是一种处理客户端请求的技术; 提供客户端请求的内容,如URL中所指定。 URL由路径和查询字符串组成。

要查看客户端的请求查询字符串,我们可以在响应中添加以下行。

res.write(req.url);
res.end()

以下是新代码。

var http = require('http');
http.createServer(function(req,res){
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write(req.url);
res.end();
}).listen(8080);
consol.log('Server started on localhost:8080; press Ctrl-C to terminate...!');

使用以下命令保存文件并再次启动应用程序。

$ node server.js

或者

$ npm start

在Web浏览器中输入不同的URL,如下所示。

查看客户的应用程序请求

现在,我们将为Linux公社www.linuxidc.com创建一个非常小的网站,其中包含主页,关于和作者页面。 我们将在这些页面上显示一些信息。

打开server.js文件进行编辑,并在其中添加下面的代码。

//include http module
var http = require('http');

http.creatServer(function(req,res){
//store URL in variable q_string

var q_string = req.url;
switch(q_string) {
case '/':
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('欢迎光临www.linuxidc.com!')
res.end();
break;
case '/aboutus':
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('关于Linux公社');
res.write('\n\n');
res.write('Linux公社(www.linuxidc.com)是专业的Linux系统门户网站!');
res.write('\n');
res.end('了解更多: https://www.linuxidc.com/aboutus.htm');
break;
case '/contactus:
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('联系我们');
res.write('\n\n');
res.end('联系我们: https://www.linuxidc.com/contactus.htm');
break;
default:
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('Not Found');
break;
}
}).listen(1688);
console.log('Server started on localhost:1688; press Ctrl-C to terminate....');