Node.js浅解
来源:互联网 发布:代码高亮java 编辑:程序博客网 时间:2024/06/07 16:27
始于兴趣,一个月前接触了近来声名显赫的Node.js,随着使用和了解的深入,越来越觉得喜欢。想和只听过其概念的朋友分享所学皮毛,大牛请绕过,打搅!依个人理解,Node.js提供了一个编程环境,跟我们所熟知的Java,C++,C#,PHP等差不多,只是他的语言是简单的javascript,并且提供了大量的基础设施(如文件系统操作,网络通信,加密解密,模块管理,事件机制,Http等),社区也提供了大量的框架(NPM,Express, mongoose)。正如官网首页所述,它天生就是用来实现高效率的分布式网络应用。下面我们将简单的介绍几点。
著名的Hello World
遵循惯例,先实现Hello World.。Node.js的安装非常简单,Windows官网有安装程序,记得配置一下环境变量。新建一个javascript文件helloworld.js,敲下如下一行码:
console.log('Hello World');
打开命令行,输入node helloworld即可看到控制台输出Hello World。没有编译,非常非常的简单。此处console是Node.js内置的一个命令行对象。
非阻塞式编程+事件驱动
事件驱动和非阻塞式编程是Node.js的核心。Node.js是单线程的,单个Node.js进程只有一个线程。该线程一直高效率的处理着当前所能够处理的命令,任何不能立即完成的任务返回结果时再通知线程继续处理返回逻辑,线程继续处理其它命令。一个比较典型的例子是对文件系统的访问,从开始访问到文件系统返回结果需要一段时间,普通的程序当前线程会挂起等待返回,返回之后再继续往下处理。Node.js线程不会等待返回,而是继续处理其它命令。判断文件是否存在的代码如下:
var fs = require('fs'); fs.exists('c:\nodejs\readme.txt', function(exist){if(exist){console.log('existed');}else{console.log('not existed');}});
其中fs是Node.js提供的一个文件系统模块,线程在调用到fs.exists方法之后不等待文件系统返回,继续处理其它任务,等到文件系统有响应之后再调用匿名函数,Node.js才回来继续处理返回的处理逻辑。所谓的高效率正来源于此。虽然线程的切换没有进程那么大,但是还是要一定的开销的。另外单线程编程也避免了多线程编程的复杂易错问题。
模块管理
中型大型的项目都需要把代码分布到不同的文件以及文件夹下面,利于开发维护和测试。Node.js通过require和exports来实现。如官方文档里面的例子:
circle.js
var PI = Math.PI;exports.area = function (r) { return PI * r * r;};exports.circumference = function (r) { return 2 * PI * r;};
app.js
var circle = require('./circle.js');console.log( 'The area of a circle of radius 4 is ' + circle.area(4));
命令行输入node app即可看到结果。exports是一个内置的对象,require的时候会返回,上面的circle.js中为exports赋值了两个函数。值得一提的是exports自身也可以被赋值比如:
circle.js
var PI = Math.PI;exports = function (r) { return PI * r * r;};
app.js
var circle = require('./circle.js');console.log( 'The area of a circle of radius 4 is ' + circle(4));
此时require返回的是一个函数,可以直接使用,这得益于javascript里面function是一等公民,可以作为参数传递。
不可思议的Web服务器
不需要tomcat, Httpd或者Nginx你也可以构建一个自己的高性能服务器。非常简单,官网首页就有一个例子,为了表示尊敬,我还是贴一下Hello World服务器。
app.js
var http = require("http");http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); }).listen(8888);
http也是Node.js的一个内置模块。命令行node app, 浏览器输入localhost:8888查看Node.js web server返回的欢迎语句。
学习资料推荐
《The Node Beginner Book》 中文译名Node入门
- Node.js浅解
- js node
- Node.JS:
- node js
- node.js
- node.js
- node.js
- Node.js
- node.js
- Node.js
- Node.Js
- node js
- Node.js
- node.js
- node.js
- node.js
- node.js
- node.js
- 对于栈回溯一点思考
- Activity设置singleInstance后不能启用startActivityForResult()进行数据回调
- SQL语句各种JOIN的区别
- linux 命令大全
- 实例3:按部门统计工资人数
- Node.js浅解
- 使用光标查询10部门的员工姓名和工资,并打印__使用光标查询员工姓名和工资,并打印
- 堆内存与栈内存的区别
- 在服务中用管理员权限创建一个进程
- 【转】让CMD窗口显示中文[JAVAC输出中文错误信息乱码的解决]
- 统计每年入职的员工个数
- scp 连接ipv6
- 高精度算法
- 在EF4.1的DBContext中实现事务处理(BeginTransaction)和直接执行SQL语句的示例