Nodejs入门
----------------------------Nodejs是个什么东西
javascript是一门完整的语言,可以运行在不同的上下文环境中.
我们平时都在浏览器中运行javascript代码,浏览器为js提提供了一个上下文,它定义了使用JavaScript可以做什么
Node.js事实上就是另外一种上下文,它允许在后端(脱离浏览器环境)运行JavaScript代码。
要实现在后台运行JavaScript代码,代码需要先被解释然后正确的执行。Node.js的原理正是如此,它使用了Google的V8虚拟机(Google的Chrome浏览器使用的JavaScript执行环境),来解释和执行JavaScript代码。
---------------------------------技巧
- node安装以后可以用 $ node app 命令执行。
- 如果直接用输入node回车,会进入持续的node环境,可运行javascript代码,按两次ctrl+c退出
- 前几天摸索的mongodb也有这个功能,因为mongodb的shell是基于javascript的
- 两者的连续输入模式都可以输入,运行javascript代码。
- 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 /”命令执行完成之后才会被调用。
请求处理程序 -> 请求路由 -> 服务器 这样方式传递值,最后给用户