zoukankan      html  css  js  c++  java
  • Node.js学习入门

    Node.js是什么

    Node.js是一个可以允许我们在服务器端运行JavaScript代码的程序。
    这是什么意思呢?通常,我们写的JavaScript代码都是在浏览器中运行的。
    实际上,浏览器就是一个JavaScript运行时环境,用于解释执行js代码。
    更进一步地说,虽然浏览器提供了JavaScript运行时环境,但是它处在客户端,也就是说此时JavaScript只能用于编写前端代码。
    但是,由于Node.js的出现,JavaScript代码的执行就不会被局限于在客户端,我们同样可以让JavaScript代码在服务端执行。
    OK,也就是说,即便你不懂任何服务端编程语言,但是你会写JavaScript代码,那么你就同样可以编写在服务端运行的程序。
    注意:虽然我们可以使用Node.js运行js代码,但是Node.js本身却是C语言开发的!

    关于Node.js的官方解释(详见:https://nodejs.org/zh-cn/):

    • Node.js是一个基于Chrome V8引擎的JavaScript运行时。
    • Node.js使用高效、轻量级的事件驱动、非阻塞 I/O模型。
    • 它的包生态系统,npm,是目前世界上最大的开源库生态系统。

    如何使用Node.js

    使用Node.js非常简单,有2种方式:
    其一,直接运行node命令,进入node交互式shell环境,然后在其中编写并执行js代码。

    > node
    > console.log("hello,world")
    hello,world
    undefined
    >
    

    上面案例中,在shell中键入了“console.log('hello,world')”并敲回车。Node便开始执行该代码,并显示刚才记录的信息,同时打印出“undefined”。这是因为每条命令都会返回一个值,而console.log没有任何返回,故输出“undefined”。

    其二,使用Node.js执行一个JavaScript文件,这是我们平时最常用的方法。

    > node D:\Node.js\workspace\test-helloworld\logparserv2.js
    2013-08-09T13:50:33.166Z A 2
    2013-08-09T13:51:33.166Z B 1
    2013-08-09T13:52:33.166Z C 6
    2013-08-09T13:53:33.166Z B 8
    2013-08-09T13:54:33.166Z B 5
    { A: 2, B: 14, C: 6 }
    

    输出内容为对应js文件中的console输出信息。

    Node.js应用举例

    Node.js是单线程的。所以,Node.js典型的模式是使用异步回调。
    基本上,你告诉Node.js要做的事,它执行完后便会调用你的函数(回调函数),这对于Web服务器尤其重要。
    在现代Web应用访问数据库的过程中特别普遍,当你等待数据库返回结果的过程中,Node可以处理更多请求。
    与每次连接仅处理一个线程相比,它使你以很小的开销来处理成千上万个并行连接。
    Node.js本身已经内置了许多有用的编程模块,可以用于实现一些有用的功能。
    而且也已经存在许多独立的框架模块,可以方便地实现以前只能使用笨重的服务端语言实现的功能。

    1. 解析日志文件

    // 加载filesystem模块,读取文件
    var fs = require("fs");
    fs.readFile("D:\Node.js\workspace\test-helloworld\test.log", function(error, logData){
    	if(error) {
    		throw error;
    	}
    	var text = logData.toString();
    	console.log(text);
    	// 解析文本
    	var results = {};
    	// 将文本分割为多行
    	var lines = text.split("
    ");
    	lines.forEach(function(line){
    		// 对每一行文本进行解析
    		var parts = line.split(" ");
    		var letter = parts[1];
    		var count = parseInt(parts[2]);
    		if(!results[letter]) {
    			results[letter] = 0;
    		}
    		results[letter] += count;
    	});
    	console.log(results);
    });
    

    日志文件格式:

    2013-08-09T13:50:33.166Z A 2  
    2013-08-09T13:51:33.166Z B 1  
    2013-08-09T13:52:33.166Z C 6  
    2013-08-09T13:53:33.166Z B 8  
    2013-08-09T13:54:33.166Z B 5
    

    2. 编写http服务

    // 加载http模块
    var http = require("http");
    http.createServer(function(req, resp){
    	resp.writeHead(200, {"Content-Type" : "text/plain"});
    	resp.end("Hello! I am a Node.js http server.
    ");
    }).listen(8080);
    console.log("server running on 8080
    ");
    

    为什么要用Node.js

    Node.js提供了一种全新的编写后端服务的方式,它并不要求你学习新的编程语言,只要熟悉JavaScript就可以后端服务。
    注意:Node.js仅仅是一个JavaScript运行时环境,单纯安装它并不能做什么。
    但是,使用Node.js内置的或者第三方的模块,可以实现做很多有实际意义的事情。

    常用的Node.js模块

    1.fs模块,Node.js自带的模块,可用于访问文件系统(:在浏览器中执行的js代码是不能访问文件系统的)。
    2.http模块,Node.js自带的模块,用于构建http服务。
    3.Express框架,第三方模块,可使创建网站的过程十分简单,详见:http://expressjs.com/
    4.koa,web框架,详见:http://koajs.com/
    5.fastify,web框架,详见:https://github.com/fastify/fastify

    写在最后

    1.编写在Node.js中运行的服务程序,熟练掌握JavaScript语言是基础。
    同时,编写的程序要遵循JavaScript语言的相应规范和约定。例如:编写模块化程序。
    myparser.js

    // 将日志解析独立成一个模块
    var Parser = function() {
    };
    
    // 解析文本
    Parser.prototype.parse = function(text){
    	var results = {};
    	// 将文本分割为多行
    	var lines = text.split("
    ");
    	lines.forEach(function(line){
    		// 对每一行文本进行解析
    		var parts = line.split(" ");
    		var letter = parts[1];
    		var count = parseInt(parts[2]);
    		if(!results[letter]) {
    			results[letter] = 0;
    		}
    
    		results[letter] += count;
    	});
    
    	// console.log(results);
    	return results;
    };
    
    // 告诉Node.js输出文件中的构造函数
    module.exports = Parser;
    

    logparser.js

    // 加载自定义的模块
    var Parser = require("./myparser");
    var fs = require("fs");
    
    fs.readFile("D:\Node.js\workspace\test-helloworld\test.log", function(error, logData){
    	if(error) {
    		throw error;
    	}
    
    	var text = logData.toString();
    	console.log(text);
    
    	var parser = new Parser();
    	var results = parser.parse(text);
    	console.log(results);
    });
    

    2.在Node.js中还存在一个叫做npm的包管理工具,这是Node.js默认的,以JavaScript编写的软件包管理系统,可以类比java中的maven。npm会随着Node.js一起安装,npm模块仓库提供了一个名为“registry”的查询服务,用户可通过本地的npm命令下载并安装指定模块。此外用户也可以通过npm把自己设计的模块分发到registry上面。
    3.npm可以管理本地项目的所需模块并自动维护依赖情况,也可以管理全局安装的JavaScript工具。如果一个项目中存在package.json文件,那么用户可以直接使用npm install命令自动安装和维护当前项目所需的所有模块。在package.json文件中,开发者可以指定每个依赖项的版本范围,这样既可以保证模块自动更新,又不会因为所需模块功能大幅变化导致项目出现问题。开发者也可以选择将模块固定在某个版本之上。

    【参考】
    http://www.csdn.net/article/2013-08-28/2816731-absolute-beginners-guide-to-Node.js 专门针对初学者的Node.js教程
    https://zh.wikipedia.org/wiki/Npm npm维基百科

  • 相关阅读:
    Django添加数据、查询数据(转载)
    Django添加数据、查询数据(转载)
    Django-用户权限,用户角色使用指南(转载)
    Django-用户权限,用户角色使用指南(转载)
    DJANGO复制记录的方法(转载)
    django 使用框架下auth.models自带的User进行扩展增加字段(转载)
    Django 怎样控制某个按钮的显示权限 (转载)
    IOS 内付 asp.net mvc 服务器端验证
    【问题】抓取微信公众号文章 特殊字符()问题
    Unable to Connect: sPort: 0 C# ServiceStack.Redis 访问 redis
  • 原文地址:https://www.cnblogs.com/nuccch/p/7702432.html
Copyright © 2011-2022 走看看