想学习node.js需要什么基础知识?

JavaScript012

想学习node.js需要什么基础知识?,第1张

1使用JavaScript运行于服务端的平台上,自然继承了JavaScript语言的一些特性;

2Node.js基于单线程、基于非阻塞I/O模型实现;

3适合于数据密集型应用,不适用于计算密集型类的应用(如算法等);

4通过使用回调函数,来避免同步地等待I/O操作完成;

5Node.js非核心模块非常多,质量可能参差不齐(使用别人贡献的模块,要有承担风险的准备);

6因为简单,开发Node.js应用程序效率很高;

7调试相对困难,调试工具可能没有其他一些比较成熟的语言(如Java、C++等)的好用;

8Node.js基于事件驱动架构,events模块是Node.js最核心的模块。

对于刚接触Node.js的新手来说,第一步无非是打好基础,你需要弄明白以下事情:

JavaScript 的特性和语法。假如你对 JavaScript 还不熟悉的话,推荐书籍及链接:

JavaScript 推荐书籍列表

深入理解JavaScript系列

Node.js 是什么?Node.js与JavaScript的区别是什么?

Node.js的优点?Node.js的缺点?

Node.js适用场景?Node.js不适用的场景?

Node.js的基本语法。Node.js的特性:

单线程

异步 IO

事件驱动

npm 是什么?npm的基本使用

REPL

等等

其实上面的内容,大部分Node.js的书籍都有介绍。基本了解了Node.js后,我们可以写一些 hello world 的程序:

搭建一个 HTTP 服务器,返回 hello, world 。(使用 HTTP 模块)

读取一个 txt 文件,将内容显示到命令行中。(使用 fs 模块)

等等

第二步

你也许想,Node.js 只有那些少得可怜的核心模块能做什么呢?别担心,npm 上目前有近 7W 的第三方模块,月下载量高达 2.1亿 (2014—4—20 数据)… 这才是 Node.js 的活力所在。当你对Node.js已经了解的差不多了,并且按耐不住跃跃欲试了。这个时候,我们不妨用 Node.js 的第三方模块做些好玩的事情:

搭建一个微博网站

搭建一个博客网站

搭建一个在线聊天室

写一个简单的爬虫

调用一些网站的API做一些好玩的东西

等等

但是,并不是说 Node.js 只能做以上事情,几乎其他语言能做的事情 Node.js 都能做,而且有些情况下能做的更好。

第三步

当然,就像学 js 也不能只会用框架一样,学习 Node.js 也不能只会用外部模块。这个时候,我们需要回头深入了解下 Node.js 核心模块的用法。说白了,就是好好看 Node.js 官方 API 文档。看文档是码农必备技能,英语不好的童鞋浏览器装个划词翻译的插件。

第四步

多实践。不管是用核心模块还是外部模块,尝试用 Node.js 解决某个问题或者替换掉以前用其他语言写过的代码。

读源码。这里说的读源码并不是说上来就去读 Node 或者其他较大的框架的源码。这个时候,挑一些简单的只实现某个特定功能的工具模块的源码读,这种模块的代码通常在几百行,阅读起来并不是很困难,但是却能涨不少的姿势。比如:

underscore (学习 JavaScript 的语法和技巧)

等等

第五步

坚持第四步。在使用 Node.js 时发现没有合适的模块选择或者选择的模块功能不尽人意,这个时候你可以尝试去创建一个模块或者修改现有的模块,并且使用 npm 发布自己的模块或者去该模块的 GitHub  上提 PR 。

第六步

多实践。这个就不用解释了

读 Node 源码及较大的框架的源码。提高必备

多关注下 GitHub 上的牛人

重复第1-6步

node里的js,和前端用的js不一样。。。。前端用的JS,俗称JAVASCRIPT1.0,正规名称是ECMAscript3,而node上用的JS,是ECMAscript6。。

尽管都叫ECMAscript,但相比之下,6和3几乎可以看成两门不同的语言。。3的语法在6中都有,但大概只有6语法总量的三分之一左右。。。另外三分之二,在3中是没有的。。3是基于对象的,而6是面向对象的。。比如6中有类,有lambda表达式,还有静态。。通过学习3,是根本不会涉及这些概念的。。

如果以3作为标准JS的话,那么6只有三分像JS,而七分像C#。。对于前端来讲,限于基础不足,NODE会显得非常难学。。。如果之前没学过C#或者JAVA,其实很难平滑过渡到NODE。。。比如下面这是一个类,你会觉得它是你所认为的JS代码?

class BaseResult{

constructor(code,msg,data){

this.code = code

this.msg = msg

***.data = data

}

setCode(code){

this.code = code

}

getCode(){

return this.code

}

setMsg(msg){

this.msg = msg

}

getMsg(){

return this.msg

}

setData(data){

***.data = data

}

getData(){

return ***.data

}

getRes(){

return {'code':this.code,'msg':this.msg,'data':***.data}

}

}

const SUCCESS = new BaseResult(0,'成功',{a:10,b:[{c:10,d:20},{e:30,f:40}]})

console.log(SUCCESS)

所以如果你目前只是学习前端,NODE可以暂时跳过,因为你根本学不会,即便自己觉得会了,到了做项目,你就明白自己根本不是真会,不理解面向对象,根本做不了完整的后端项目。。。要想转到后端,面向对象的ES6是根本跳不过去的

如果将来有机会学学C#或者JAVA,养成了面向对象思想,再学NODE就会变得非常平滑。。