现在javascript是火到不行了,能干的事情越来越多了,现在根据MVC提出了一种新的WEB的分层模式Model-View-Presenter)也被人提的蛮多的。主要是想把部分逻辑推到客户端运行,这样也能起到负载均衡的作用,那么客户端逻辑部分处理非JS莫属了。另外,由黑客写出来的Node.js更是让js具备了处理后台逻辑的能力。
Node.js 是单线程异步的,和我们现在主流的处理方式有较大区别。看了介绍,Node.js是基于事件来处理的,它将每个事件都放在了事件队列中,然后不断的循环遍历这个队列,如果某个事件被触发了,那么就调用它的回调函数。
下面是一个Node.js HelloWord的Demo
//node.js 里是按模块和包来组织的,模块对应文件,包对应目录。 按照CommonJs的规范,包下面要有一个package.json的说明文件.其中包含包的入口,以及版本,作者之类的信息。可以通过包管理器npm 的init命令按照提示来生成这个JSON文件var http = require("http"); // htpp模块封装了与Web应用相关的功能,底层用c++实现。/** http 模块内有一个Server对象,负责处理web请求。它其实是一个EventEmitter的子类。 * 它有几个常用的事件分别是request,connection,close。 request是在有请求的时候触发的,connection是当tcp连接时触发的,connection比 * request的粒度要大,一个connection可以有多个request. close事件则是在服务关系的时候触发的。 *//*http.createServer 相当于 var server = new http.Server(); server.on('request',function(request,response){code});这里回调函数里的两个参数分别是 Http.ServerRequest 和 Http.ServerResponse 对象,和Servlet的HttpServletRequest和HttpServletResponse差不多,都封装了http请求和响应。*/http.createServer(function(req,resp){ console.log("hello,word"); resp.writeHead(200,{'Content-Type':'text/html;charset=UTF8'}); resp.write("Node.Js
"); resp.write("Hello,world! Lin"); resp.end(); }).listen("9000");console.log("HTTP Server is Start Now!");
运行后在浏览器输入localhost:9000/
运行结果页面:Node.jsHello,world! Lin终端:HTTP Server is Start Now!hello,wordhello,word/**首先,由于Node.js是异步的,所以HTTP Server is Start Now! 是先出现的,等我们在浏览器中访问localhost:9000后,才会触发回调函数,打印出hello,word。至于为什么是2次打印呢,查了一下资料,这个和我们的浏览器是相关的,我们浏览器对于一个请求会提交2次,额外的请求是为了取得访问网站的favicon.ico图标,也就是我们显示在标签栏上的小图标了*/