node.js写服务器端_Node.js入门指南(服务器端JavaScript)

简单来说, Node.js服务器端JavaScript 。 这些天来越来越热闹。 如果您听说过它,或者对学习和使用它感兴趣,那么这篇文章适合您。

那么在服务器中使用JavaScript到底有什么需求呢? 为了弄清楚Node.js的概念,我想将其与普通的服务器端语言(例如PHP)进行比较。 Node.js使用基于事件的服务器执行过程,而不是PHP中的多线程执行。

为了进一步解释它,我们将讨论Node.js是什么的思想以及一些托管服务提供商的建议和安装技巧 。 需要具备JavaScript,jQuery和Ajax的中级知识,但是我们还将提供示例,以使您更轻松地理解整个内容,甚至可以对其进行操作,因此,让我们进一步了解Node.js!

让我们考虑一种情况:

考虑一个网站,您需要在其中从另一台速度慢的Web服务器动态加载内容。 在PHP中,您可以通过2种方式来实现它:将其编码为一个简单文件并将其编码为另一个脚本 ,然后以多线程方法执行它

多线程执行

在第一种方法中,即使代码很简单,执行也会在访问慢速Web服务器的位置暂停一会儿 。 第二种方法在性能方面进行了优化,但是很难编写代码,并且具有多线程管理开销。 除服务器端JavaScript(即Node.js)外,大多数Web编程语言的情况都相似。

Node.js有什么区别? 为了理解Node.js,您必须牢记浏览器中JavaScript基于事件的编程 。 我们在这里使用相同的技术。 无需使用单独的线程,而是将一个函数附加到上述 “缓慢的Web服务器访问” 的完成事件上,因此您可以在上述优化的第二个选项中获得全部功能 ,而没有任何多线程开销。

Node.js入门

Node.js是JavaScript 。 为什么我们不能在客户端到服务器上利用基于事件JavaScript功能? 这种想法可能导致了Node.js的发展。

基于事件的执行

就是说,Node.js的主要亮点- 它是基于事件的异步函数 。 它使用事件循环,而不是等待I / O操作(访问外部Web服务,访问硬件)。

当服务器等待任何其他操作时,Node.js仍可以利用其处理能力 。 这使Node.js 可扩展到数百万个并发连接。

JavaScript如何在服务器上运行?

Node.js在v8环境下工作 -它是运行JavaScript代码的虚拟机JavaScript引擎 ,因此对于托管,您不能使用普通的Web主机。 您将需要具有v8环境的环境

以下是有关Node.js托管的一些提供程序建议:

  1. 云铸造
  2. 云节点
  3. 点云
  4. 双栈
安装Node.js

Node可以在Linux,Macintosh和Solaris操作系统上完美运行 。 在Windows上,您可以使用Cygwin仿真层进行安装。 Windows中的构建都不令人满意,但是仍然可以运行某些东西。

使用make来构建和安装node.js(在命令行上执行以下操作)。 需要Git

git clone --depth 1 git://github.com/joyent/node.git
cd node
git checkout v0.4.11
export JOBS=2
mkdir ~/local
./configure --prefix=$HOME/local/node
make
make install
echo 'export PATH=$HOME/local/node/bin:$PATH' >> ~/.profile
echo 'export NODE_PATH=$HOME/local/node:$HOME/local/node/lib/node_modules' >> ~/.profile
source ~/.profile

对于Mac用户,您可以从https://sites.google.com/site/nodejsmacosx/中以软件包形式安装Node.js,这很容易解释。

测试节点安装

为了检查您是否成功安装Node,我们可以尝试一个非常简单的控制台“ Hello World”程序。 创建一个名为“ test.js ”的文件,并将以下代码写入其中。

var sys = require("sys");
sys.puts("Hello World");

它将sys类加载到变量sys 。 然后,它使用sys对象执行控制台任务。 sys.puts是类似于C ++中的cout的命令,因此,要运行上面的脚本,请转到命令提示符并通过以下命令运行它:

node test.js

如果安装成功,则屏幕上将显示hello world输出。

你好,世界
创建一个HTTP服务器

现在是时候使用Node.js通过Web服务器创建“ Hello World”了。 这就是我们要做的–我们创建一个服务器,无论URL是什么,它都会在端口8080上向本地主机输出“ Hello World” ,从而使您知道事件是什么。

var sys = require("sys"),
my_http = require("http");
my_http.createServer(function(request,response){
	sys.puts("I got kicked");
	response.writeHeader(200, {"Content-Type": "text/plain"});
	response.write("Hello World");
	response.end();
}).listen(8080);
sys.puts("Server Running on 8080");

Node.js中最有趣的部分是其基于事件的编程。 为了创建HTTP服务器,我们需要HTTP库 ,因此我们继续使用my_http添加它。 我们通过以下功能创建服务器:

my_http.createServer(function(request,response){}).listen(8080);

每次在端口8080中触发事件时,都会执行作为第一个参数给出的函数,因此该函数本身建议节点侦听端口8080中的事件 。 为了检测到这一点,我添加了一条“ 我被踢 ”消息,无论何时收到请求,该消息都会显示在控制台屏幕上。

request对象包含有关已向服务器发出的请求的所有信息 。 例如,它包含URL字符串。 response对象是处理服务器响应的对象。 首先,我们将响应的标题设置为text/plain内容,然后输出“ Hello World ”,然后结束输出流。 200是状态响应。

好吧,以上示例是一个非常简单的示例,但是我们可以看到,在浏览器中为同一服务器提供的任何URL,我们都会得到与“ Hello World”一样的输出。

创建简单的静态文件服务器

让我们在下一个教程中创建一个简单的静态文件服务器。

var sys = require("sys"),
my_http = require("http"),
path = require("path"),
url = require("url"),
filesys = require("fs");
my_http.createServer(function(request,response){
	var my_path = url.parse(request.url).pathname;
	var full_path = path.join(process.cwd(),my_path);
	path.exists(full_path,function(exists){
		if(!exists){
			response.writeHeader(404, {"Content-Type": "text/plain"});  
			response.write("404 Not Found\n");  
			response.end();
		}
		else{
			filesys.readFile(full_path, "binary", function(err, file) {  
			     if(err) {  
			         response.writeHeader(500, {"Content-Type": "text/plain"});  
			         response.write(err + "\n");  
			         response.end();  
			   
			     }  
				 else{
					response.writeHeader(200);  
			        response.write(file, "binary");  
			        response.end();
				}
					 
			});
		}
	});
}).listen(8080);
sys.puts("Server Running on 8080");

上面的代码非常简单,我们将以块的形式进行讨论。

var sys = require("sys"),
my_http = require("http"),
path = require("path"),
url = require("url"),
filesys = require("fs");

该程序需要所有这些库。 在下面的代码中将清楚其用法。

var my_path = url.parse(request.url).pathname;
var full_path = path.join(process.cwd(),my_path);

如前所述, request对象具有请求详细信息。 我们使用包含的URL类的parse函数来获取请求URL的pathname 。 获取路径名后,我们将其与当前工作目录的路径连接起来,以获取文件的完整路径。

对于连接URL,我们在路径库中有一个称为join的函数。

path.exists(full_path,function(exists){

获取完整路径后,我们检查该功能是否exists 。 检查完成后,将调用回调函数并将其作为第二个参数传递。

if(!exists){
	response.writeHeader(404, {"Content-Type": "text/plain"});  
	response.write("404 Not Found\n");  
	response.end();
}
else{
	filesys.readFile(full_path, "binary", function(err, file) {  
		 if(err) {  
			 response.writeHeader(500, {"Content-Type": "text/plain"});  
			 response.write(err + "\n");  
			 response.end();  
	   
		 }  
		 else{
			response.writeHeader(200);  
			response.write(file, "binary");  
			response.end();
		}
			 
	});
}

现在在回调函数中,如果文件不存在,我们将发送“ 404页面未找到 ”错误。

如果找到该页面,则我们通过文件系统中的readFile函数读取文件。 我们还可以看到在其中定义的readFile函数的回调函数。 如果读取文件没有错误,则将显示该文件。 如果存在错误,则返回状态500和错误文本。

我还建议将上一教程的代码包装到一个函数中,以便您可以在下一教程中使用它或将来使用。

var sys = require("sys"),
my_http = require("http"),
path = require("path"),
url = require("url"),
filesys = require("fs");
my_http.createServer(function(request,response){
	var my_path = url.parse(request.url).pathname;
	var full_path = path.join(process.cwd(),my_path);
	path.exists(full_path,function(exists){
		if(!exists){
			response.writeHeader(404, {"Content-Type": "text/plain"});  
			response.write("404 Not Found\n");  
			response.end();
		}
		else{
			filesys.readFile(full_path, "binary", function(err, file) {  
			     if(err) {  
			         response.writeHeader(500, {"Content-Type": "text/plain"});  
			         response.write(err + "\n");  
			         response.end();  
			   
			     }  
				 else{
					response.writeHeader(200);  
			        response.write(file, "binary");  
			        response.end();
				}
					 
			});
		}
	});
}
my_http.createServer(function(request,response){
	var my_path = url.parse(request.url).pathname;
	load_file(my_path,response);
}).listen(8080);
sys.puts("Server Running on 8080");

就这样。 希望这对Node.js有所帮助。 在下一篇文章中,我将向您展示如何使用Node.js加载和显示喜欢的Facebook人数 。 敬请关注!

编者注:这篇文章是由Geo Paul为Hongkiat.com撰写的。 Geo是一个独立的Web / iPhone开发人员,喜欢使用PHP,Codeigniter,WordPress,jQuery和Ajax。 他有4年PHP经验和2年iPhone应用程序开发经验。


翻译自: https://www.hongkiat.com/blog/node-js-server-side-javascript/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值