之前只用过nodejs的npm工具,现在打算来深入了解一下
个人感觉入门的话,有点无从学起,官方文档看的一脸懵,比较片面的博客教程拿来入门的话也不太够,我看的是邵山欢老师的视频,一个蛮可爱的老师,讲的也很好懂。视频资源 链接:https://pan.baidu.com/s/1qXTQ7BA 密码:xjqi
nodejs用javascript编程,运行在Chrome的V8内核上。它没有服务器这个部分,
nodejs的特点:
单线程:单线程可以让所有用户共用一个线程,节省服务器内存。但是可以实现宏观上的多线程。而且避免了操作系统多次创建,销毁进程的开销。弊端就是,一旦线程崩溃,那么服务器就无法访问。
非阻塞IO:nodejs运用了非阻塞IO,传统单线程采用的阻塞IO,极大降低了程序效率。http://qindongliang.iteye.com/blog/2018539
事件驱动:用事件驱动来完成服务器的调度
因此,nodejs 比较适合需要大量IO处理的情况,而不适合需要大量计算的情况。适合做长连接的,比如跟WebSockets配合做长连接的实时交流的应用
node.js其实是比较像一个虚拟机的,它也是跨平台的。
它的程序运行在服务器端,然后将计算结构返回到客户端。
如果想修改程序,必须要先中断当前运行的服务器,改动后,重新node,运行服务器
Ctrl+C 就可以打断挂起的服务程序,此时按上箭头,能够快速调用最近的node命令
简化来想,nodejs 就相当于一个js执行环境.
node.js没有根目录的概念,它没有web容器。在启动之后,无法直接根据相应的文件路径文件名进入到相应的页面。但是它可以通过读取文件,这样一个路由设计,实现比较方便的读取页面之类的工作。
1 | fs.readFile('/etc/passwd', (err, data) => { |
###http模块###
node.js中将很多功能划分为一个个的muddule,即模块。
1 | //引用模块 |
下面是一个将helloWord呈现到页面的一段代码,算是一个完整的请求过程
1 | http = require("http"); |
node.js中一个要点就是用户请求url,所有的路由设计,都是通过req.url来完成的。由于node.js中与众不同的路由机制,我们更侧重于关心如何识别url而不是拿到url
要识别url,用到两个新的模块,一个是url模块,另一个就是querystring(查询字符串)
事件轮询机制
自己尝试把之前写的前端的demo挂在node.js上运行,结果只能运行HTML页面,相应的css和js页面加载不上来,报错 get不到~~
原因应该是之前提到的,nodejs没有web容器
所以要用到url和path这个API了