IP Address: 3.80.55.37



近些年来,网络应用开发出现了新的趋势,作为网络应用的开发人员,要时刻留意技术的演进。JavaScript语言是目前网络应用开发的发展方向,无疑也是网络开发中最为流行的实现技术。

基于JavaScript的web框架逐渐成为最为吸引人解决方案,能够显著提升开发效率,以最小的成本开发高安全性的网络应用。如果对网络应用有所关注,那么对于Node JavaScript(也就是Node.js或都简写为Node)多多少少都所耳闻。

本文将介绍如何在Linux系统中使用Node.js开发JavaSrcipt网络应用,在这之前,我们首先了解一下什么是Node.js.

什么是Node.js

Node.js是一种采用Chrome’s V8 JavaScript引擎开发的开源、轻量级高效的JavaScript实时运行环境。Node.js被设计成无线程模式(采用单线程),使用Python的网络引擎和Rubby的事件处理库。

事件驱动模型是Node.js的核心,作为Node.js的开发人员,要时刻了解会出现何种事件以及如何响应它们。

为什么Node.js很重要

Node.js十分强大也十分重要,主要有以下几种原因:

  • 它使用异步事件驱动的非阻塞I/O执行模型,这提高了应用程序的吞吐量,并且支持真实Web应用程序的可伸缩性
  • 它是单线程的,所以它在任一时刻只会使用一个CPU资源
  • 每个Node.js应用都是一个完全意义上的web服务器,就像Apache或者Nginx一样
  • 它使用child_process.fork() API来提供线程支持,用于创建子进程,并且提供集群模块

通过以上的介绍,你或许已经跃跃欲试想编写一个JavaScript应用了,但是首先需要搭建一个Node.js运行环境。其中包括Node.js以及NPM。搭建教程在>>这里<<

如何在Linux系统创建Node.js应用

Node.js一旦安装成功,就可以编写Java Script网络应用了。首先,需要创建一个存放应用文件的目录:

# mkdir -p /var/www/myapp

然后,进入这个新创建的目录,使用NPM工具我们的网络应用创建一个package.json文件,这个文件是一个关于此网络应用的小帮助文档,里面记录了应用名称、作者以及依赖文件等基本信息。

# cd /var/www/myapp
# npm init

在这一步中,系统会请求用户回答一些问题来完成”package.json”文件的内容,关于这些问题的详细解释如下:

  • package name – 应用名称
  • version – 应用版本
  • description – 应用的简短说明
  • entry point – 设置默认执行的文件,相当于HTML网站的默认页面
  • test command – 用于创建测试脚本 (默认为空)
  • git repository – 指定一个Git软件库,如果不需要则为空即可
  • keywords – 设置关键字,用于在npm中查找本应用
  • author – 应用作者
  • license – 设置本应用的许可

完整示例过程如下图所示:

如上图所示,我们设置了应用的默认执行文件为”index.js”,那么接下来就需要创建这个文件来启动应用。

创建”index.js”文件,并将如下内容添加至文件:

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

可以看到,文件使用的语言完全为Java Script,这对于开发网络应用来说极大的提升了便利性。

下面要做的就是使用如下命令测试Node.js服务器是否正常工作,可以启动我们添加的应用:

# node index.js

如果见到如下图所示信息,请表示应用已经成功启动:

现在要做的就是打开浏览器访问Node.js主机的8008端口,看是否会显示”Hello World!”信息。如果看到下图所示内容,就表示我们的web应用可以正常启动了。

我们之前的代码主要是使用HTTP模块来响应HTTP请求,而这个HTTP模块就是一个标准的Node.js内建模块。

Node.js HTTP模块

在Node.js中,模块与Java Script的类库十分类似,它们可以被我们的应用所引用来完成特定的功能。在Node.js应用中,我们既可以使用内建模块,又可以使用第三方模块,甚至可以使用自己创建的模块。

为了调用模块,可以使用”require”函数来完成:

  var http = require('http');

一旦http模块被引入,它就可以完成创建服务器并侦听特定端口的功能(本例使用8008)。http.creatServer方法会以同用户相关的请求和响应作为参数来创建http服务器:

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

这个createServer方法有两个参数,其中req表示用于接收客户端的请求,而res表示返回给客户端的响应结果。

代码的最后一句是用于向命令行终端回显信息,作为Node.js对服务器本身的输出内容:

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

Node.js中的路由

路由在Node.js是一个十分重要的概念,这与网络技术中为数据包找寻到达目的地路径类似。Node.js中的路由是一种处理客户端请求的技术,用于将不同内容的请求用不同的URL地址区分开来。我们可以利用如下代码,来查看客户端请求的内容:

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

现在,我们通过浏览器访问不同的内容,例如如下例子:

http://192.168.235:8008
http://192.168.1.235:8008/about
http://192.168.1.235:8008/daehub/authors

现在,我们就可以根据不同的请求内容,响应不同的内容:

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

  http.createServer(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('Welcome To Daehub.com!')
                        	res.end();
                        	break;
                	case '/about':
                		res.writeHead(200, { 'Content-Type': 'text/plain' });
                        	res.write('About Us');
                        	res.write('\n\n');
                        	res.write('Daehub.com - The whizz center');
                        	res.write('\n');
                        	res.end('Find out more: https://www.daehub.com');
                        	break;
                	case '/daehub/authors':
                        	res.writeHead(200, { 'Content-Type': 'text/plain' });
                        	res.write('Daehub Authors');
                        	res.write('\n\n');
                        	res.end('Find all our authors here: https://www.daehub.com');
                        	break;
                	default:
                       		res.writeHead(404, { 'Content-Type': 'text/plain' });
                       		res.end('Not Found');
                        	break;
	}
  }).listen(8008);
  console.log('Server started on localhost:8008; press Ctrl-C to terminate....');

可以看到,Node.js可以根据不同的客户端请求,做出与之对应的响应了,这就是所谓的路由,看起来是不是很容易呢。

发表评论

电子邮件地址不会被公开。 必填项已用*标注