https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434501497361a4e77c055f5c4a8da2d5a1868df36ad1000学习网址
node优缺点 写一个node程序时命令行模式和交互式模式 nodejs的异步io
一、node.js的优点
最大的优点是借助javascript天生的事件驱动机制和V8高性能,使编写高性能web轻而易举。
其次,javascript本身是完善的函数语言,但是node和js相比因为不能考虑兼容性问题,直接使用ES6(EcmaScript6)标准,可以完全满足工程上的需要。
优点:
1部署简单 npm使得模块依赖关系变得容易处理
2事件驱动
3 异步编程:回调函数,事件监听,发布/订阅
4高效性能:优化资源调配和IO操作
5单线程和多进程
缺点:
1大量使用匿名函数,使得抛出的异常不易阅读
2 try/catch限于同步代码,使得异常捕获变得复杂
3 单线程的可靠性问题
4 不适应cpu密集的操作
5 回调代码的阅读
二、第一个node程序
输入以下代码:
第一行总是‘use strict’因为我们是用的是严格模式运行js代码,避免各种潜在陷阱。
然后选择一个目录,例如C:\Users\Zhu\Desktop\测试\node.js学习,就可在命令窗口执行,输入以下程序:
也可以是其他名字,就是必须是js结尾。
三、node命令行模式和交互式模式
上面为命令行模式
底下为交互式模式为:(直接输入node出现>即可,且可自动运算)
交互模式可以自动计算结果并且输出结果
如果是命令行模式调用.js就必须手动输出:
(100+200+300)比如:add.js比add-1.js多了一个console.log
即是说交互式环境中直接写(200+100+300)就可输出结果,用命令行模式调用.js时,需要加上输出(console.log(100+200+300))才可输出结果
四、搭建node开发环境
五、模块
在计算机发展中,代码越来越多越来越长,越来越不容易维护。
为了编写方便,我们把函数分了很多组,分别放到不同的文件里,这样每个文件里包含的代码就相对较少,很多编程语言都采用这种组织代码的方式,在node环境中,一个js模块就成为一个模块。
模块的优点:最大的好处就是大大提高了代码的可维护性。其次,编写代码不必从0开始。当一个模块写完就可以被其他模块引用,我们在编写时也经常引用其他模块,包括node内置的模块以及来自第三方的模块。
使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以存在不同的模块中,所以编写函数时不用担心自己命名会与其余的模块冲突。
例如:我们把一个greet()函数定义在Hello模块中,Hello.js即就是一个Hello模块,最后一行的赋值指的是把函数greet暴露出去,这样就可以使用greet函数了。
我们再编写一个main.js文件,调用Hello模块里的函数。
注意到:引用greet函数使用的是node自带的require函数
引用模块变量保存到greet变量中,其实greet就是Hello.js中的我们用module.exports=greet;输出greet函数。所以,main.js就成功的引用了hello.js模块中的greet()函数,接下来就可以直接用了。
在使用require()引入模块时,请注意模块的相对路径。因为main.js和Hello.js位于同一个目录,所以我们用了当前目录 . :
//不要忘记写相对目录
如果只写模块名:
var greet = require('hello');
则Node会依次在内置模块、全局模块和当前模块下查找hello.js
,你很可能会得到一个错误:
module.js
throw err;
^
Error: Cannot find module 'hello'
at Function.Module._resolveFilename
at Function.Module._load
...
at Function.Module._load
at Function.Module.runMain
遇到这个错误,你要检查:
- 模块名是否写对了;
- 模块文件是否存在;
- 相对路径是否写对了。
五、CommonJs
这种模块加载机制被称为CommonJS规范。在这个规范下,每个.js
文件都是一个模块,它们内部各自使用的变量名和函数名都互不冲突,例如,hello.js
和main.js
都申明了全局变量var s = 'xxx'
,但互不影响。
一个模块想要对外暴露变量(函数也是变量),可以用module.exports = variable;
,一个模块要引用其他模块暴露的变量,用var ref = require('module_name');
就拿到了引用模块的变量。
结论
要在模块中对外输出变量,用:
module.exports = variable;
输出的变量可以是任意对象、函数、数组等等。
要引入其他模块输出的对象,用:
var foo = require('other_module');
引入的对象具体是什么,取决于引入模块输出的对象。