REPL运行环境
一个比较良好的交互式运行环境,我们可以在这里做简单的测试和调试,由于nodejs由v8 javascript脚本引擎解释,所以这也是一个比较好的用于插入式我们的脚步的地方
我们输入node 则可以进入
案例输入变量
str='hello'---不能输入var
因为我们的字符串会被直接解析出来
javaScript---eval()
console.log('str='hello'')
案例2boolean操作
案例3:简单的测试对象,对象会被输出成字符串
在这里_表示最近申明的一个变量
案例_+1=?(注意原值)
运行函数
案例 运行简单的函数
简单的命令有哪些
.help
console.log()---用于输出
console.log('%s','hello','world'); %s--输出字符串
console.log('%d',10,10.5)---输出数值
console.log('%%')---输出百分号
注意在console.log()中也可以完成计算功能
console.log(4/2);
console.error用于输出错误
node test.js 2>error.txt
console.dir查看对象专用
案例输出对象属性
项目路径----
统计程序运行时间:
console.time()---console.timeEnd();---记录
--nodejs程序执行事件管理
console.assert()用于对一个表达式的结果做一个评估,如果表达式的结果为false则输出错误字符出并排抛出异常
nodejs中的全局信息---global(在node任何地方都可以使用的)
输出console.log(global)可以查看出node全局变量 全局函数 全局对象
全局函数
setTimeout(要执行的回调函数,时间,参数)---javaScript
案例
setTimeout(function(){console.log('5')},5000);
console.log('1');
function test(){
setTimeout(function(){console.log('2')},1000);
}
test();
console.log('3');
setTimeout(function(){console.log('4')},2000);
clearTimeout() setInterval() clearInterval()
定时器对象的unref和ref方法
定时器.unref()
当取消之后可以使用定时器.ref()
--认识
(本次课程最后讲解)
回到第一章最底部为讲述模块
同一个模块引入多次案例
结论,同一个模块被引入多次,其实只真实发生了一次,其余的是第一次的缓存被加载到了缓存区中
resolve---查看引入文件的完整路径
require.cache----查看当前文件引入有文件的缓存区
_filename _dirname
这两个变量是被预定义在nodejs中的(想一下argmenuts),用于获取当前模块名和目录名
nodejs事件处理(重点)
回忆下javascriptt
用户对页面元素进行操作,给页面元素绑定一个事件之后就会触发相对应的事件
同样的nodejs中也有很多事件机制
nodejs的用于处理各种事件处理的event模块中,定义了一个EventEmitter这样一个类,所有可能触发事件的对象都是一个继承了它的子类和实例对象
EventEmitter类的各种方法~~~大多数的
其中第一个为事件名称,第二个为事件处理函数
addListen(event,listen) ——对指定的事件绑定事件处理函数
on(event,listen) 用法同上,方法别名
once(event,listen)----对指定时间之执行一次的事件处理函数
removeListen(event,listen)解除绑定事件
removeAllListen([event])-批量解除处理函数
setMaxListens(n)指定时间处理函数的最大数量
listens(获取指定时间的所有处理函数)
emit(event)---手工触发指定事件
注意点1:on可以对一个事件绑定多个处理函数
默认情况下,针对同一个事件,最多可以绑定10个处理函数
EventEmitter本身拥有的事件
newListener和removeListener
emit.on('newListener',function(e,f){}
事件处理函数中其中第一个参数为被绑定的事件名称
第二个参数为事件处理函数文件
核心模块和文件模块
在nodejs中都是以模块划分所有的功能(我们可以使用包把不同功能的模块分开放置)一个nodejs程序是由大量的模块构成的,而每个模块都是一个单独的js脚本文件
模块是个非常重要的组成部门,例如我们可以使用模块来引入别的模块(mysql的操作也是有现成的模块---第三方模块)
模块的好处的是可以重用---避免我们写大量重复的代码
核心模块---nodejs中预定义的模块,例如http模块
案例
var http=require('http');
http.createServer(function(req,res){
res.writeHead(200,{'content-type':'text/plain'});
res.end('hello');
}).listen(9000,'127.0.0.1');
当然除了官方提供和我们自己编写的,你也可以在网上下载模块文件 第三方模块
.js .json .node---编译过的2进制文件
加载模块的时候我们必须给定完整的路径名称(相对路径),可以使用./(代表当前模块目录开头)也可以使用/开头的绝对路径---不推荐
exports对象详解
在一个模块文件中定义的本地变量 函数或者对象只能在本模块内部使用,单你需要在模块外部引用这些变量 函数 对象的时候,需要在该模块文件中使用exports对象
案例
演示导出变量和方法
注意:
为什么我们的核心模块没有写路径直接写文件名称呢?因为被内置了,单如果我们也有这样的文件(不想重复的写路径),我们可以把模块放在我们的node_modules目录下
如果在我们自己的工程中,我们也可以这样新建这样一个测试一下
模块对象的属性
在模块对象内部,可以访问当前模块对象如下所示的一些属性
module.id
当前模块的ID,一般情况下默认为.其他模块的ID属性值为该模块文件的绝对路径
案例,测试当前和其他模块的id
module.filename
当前模块的模块名称
module.loaded
当前模块是否被加载完成
module.parent module.children
调用当前模块的模块对象
当前模块的子对象
//用于接受用户请求
//连接数据库
重点
包与npm管理工具
专门网络社区---资源区()
在nojdjs中可以通过包来对一组具有相互依赖关系的模块进行统一管理,通过包的使用,我们可以将独立的功能封装起来
在node中包其实不是一个严格的包(package) 而只是一个目录,其中包含了用于对包描述的json文件---可以查看node安装目录下的包
通常包括这些东西
package.json文件json----文件格式用于互联网快速传送类容
bin子目录中的二进制文件
lib中存放的js文件
doc目录中存放对包或者包的使用方法进行说明的文档
test中存放一些对当前包的测试文件
重点是json
在nodejs中给我提供了一个叫npm的管理工具
它支持我们从第三方网站上下载nodejs包
我们可以在命令窗口中输入并执行这个工具
测试 npm install mysql
npm -uninstall 卸载某个包
npm update 包来更新