Nodejs入门

----------------------------Nodejs是个什么东西

 

javascript是一门完整的语言,可以运行在不同的上下文环境中.

我们平时都在浏览器中运行javascript代码,浏览器为js提提供了一个上下文,它定义了使用JavaScript可以做什么

Node.js事实上就是另外一种上下文,它允许在后端(脱离浏览器环境)运行JavaScript代码。

要实现在后台运行JavaScript代码,代码需要先被解释然后正确的执行。Node.js的原理正是如此,它使用了Google的V8虚拟机(Google的Chrome浏览器使用的JavaScript执行环境),来解释和执行JavaScript代码。

 

---------------------------------技巧

  1. node安装以后可以用 $ node app 命令执行。
  2. 如果直接用输入node回车,会进入持续的node环境,可运行javascript代码,按两次ctrl+c退出
  3. 前几天摸索的mongodb也有这个功能,因为mongodb的shell是基于javascript的
  4. 两者的连续输入模式都可以输入,运行javascript代码。
  5. node的模块只能加载一次,quire导入模块的时候,会先从require.cache 中检查模块是否已经加载,如果没有加载,才会从硬盘中查找模块脚本并加载。 require支持相对路径查找模块,例如上面代码中require('./moduleExample')中的“./”就代表在当前目录下查找。

-----------------------------Nodejs是事件驱动的

 

不过这是Node.js原生的工作方式。它是事件驱动的,这也是它为什么这么快的原因。

事件驱动的异步服务器端JavaScript和它的回调啦!

 1 function onRequest (request,response) {
 2     console.log('Request received');
 3     response.writeHead(200,{"Content-Type":"text/plain"});
 4     response.write("Hello World");
 5     response.end();
 6 }
 7 
 8 http.createServer(onRequest).listen(8888);
 9 
10 console.log('Server has started');

 

http.createServer(onRequest).listen(8888);

onRequest是我们传递进去的回调函数,当我们请求页面的时候调用,会传入两个参数,这两个参数都是对象.

这两个参数对象可以包含请求的细节(request),和我们返回给用户的内容(response)

当收到请求时,使用 response.writeHead() 函数发送一个HTTP状态200和HTTP头的内容类型(content-type),使用 response.write() 函数在HTTP相应主体中发送文本“Hello World"。

response.end()完成响应.

 

---------------------------------nodejs 模块

 

var http = require('http') //http模块

这里我们请求了一个http模块,返回了一个拥有所有http模块共有方法的对象,赋值给了变量。

一般变量名和模块名一致。

 

---------------------------------nodejs 编译型的?

 

我修改了js中的一些内容,必须重新node server.js才能实现,是不是变成了java的编译的,后续看看他能不能动态接收参数。

 

叫重启服务器,具体内容还未知

 

--------------------------------传参强大之处

 

就像这样,我们传递一个东西,然后服务器利用这个东西来完成一些事。嗨那个叫路由的东西,能帮我把这个路由一下吗?

 

我仅仅是需要拿你来执行一个动作,你不需要名词,只需要动词。即参数传递的是直接要用的动词函数.

 

--------------------------------阻塞与非阻塞

 

因为Node一向是这样来标榜自己的:“在node中除了代码,所有一切都是并行执行的”

这句话的意思是说,Node.js可以在不新增额外线程的情况下,依然可以对任务进行并行处理 —— Node.js是单线程的。它通过事件轮询(event loop)来实现并行操作,对此,我们应该要充分利用这一点 —— 尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。

然而,要用非阻塞操作,我们需要使用回调,通过将函数作为参数传递给其他需要花时间做处理的函数(比方说,休眠10秒,或者查询数据库,又或者是进行大量的计算)。

child_process。之所以用它,是为了实现一个既简单又实用的非阻塞操作:exec()

exec()在后台执行的时候,Node.js自身会继续执行后面的代码。并且我们这里假设传递给exec()的回调函数,只会在“find /”命令执行完成之后才会被调用。

请求处理程序 -> 请求路由 -> 服务器 这样方式传递值,最后给用户

posted @ 2012-08-11 18:27  zzu-han  阅读(5025)  评论(0编辑  收藏  举报