node.js快读入门
命令行窗口
-开始菜单-运行-CMD-回车
-常用指令:
dir:列出当前目录下的文件
cd 目录名:进入指定目录
cd .:表示当前目录
cd …:表示上一级目录
md 目录名:创建一个文件夹
rm 目录名:删除一个文件夹
文件名:打开该文件
想要在其他地方也能打开文件配置环境变量(Windows系统中变量)
path:所在的地址(高级设置),改完之后要重启
原因:当我们在命令行窗口打开一个文件,或调用一个程序时,系统会首先在当前目录下寻找文件,如果找到了直接打开;如果没有找到会依次到文件变量path路径中寻找;还没有就报错
进程和线程
1.进程:负责为程序运行提供必备的环境
相当于工厂中的车间(存一些代码)
2.线程:是计算机中的最小单位,线程负责执行进程中的程序
相当于工厂中的工人
单线程(js单线程,Chrome浏览器)
多线程
node.js简介
node.js是一个能在服务器运行的js的开发源代码、跨平台js环境。
node采用Google开发的V8引擎运行js代码,使用事件驱动、非阻塞和异步I/O模型等技术提高性能,可以优化应用程序的传输量和规模。
交互流程:
node.js用js写高性能的web服务器(js单线程、异步)
传统服务器都是多线程的:每进来一个就创建一个线程去处理请求
node服务器是单线程的:处理请求时是单线程,但是在后台有一个I/O线程池
node用途(处理不了访问量太大的)
- web服务api
- 实时多人游戏
- 后端的web服务,例如跨域、服务器端的请求
- 基于web应用
- 多客户端的通信,如即时通信
使用node执行js文件
创建一个hello.js文件
在cmd里面,到文件所在目录下,输入node hello.js
node整合webstorm
在idea里面设置
node基础-模块化
ecmaScript标准缺陷:没有模块化系统;标准库较少;没有标准接口;缺乏管理系统。
commonjs规范为了解决模块化,弥补当前JavaScript的缺陷,指定了一个美好的愿景,希望js能够在任何地方运行
commonjs对模块的定义十分简单:
-模块引用 require
-模块定义 创建
-模块标识 在require()引入外部模块时,使用的就是模块标识(比如路径)
注:模块分为两大类
-核心模块:由node引擎提供的模块(核心模块的标识就是,模块的名字) var fs=require(“fs”)
-文件模块:用户自己创建的模块
在node中,一个js文件就是一个模块
在node中,每一个js文件中的js代码都独立运行在一个函数中
而不是全局作用域,所有一个模块中的变量和函数其他模块无法访问:可以通过exports来向外部暴露 exports.x=“我是x”
- 引入其他模块:在node中,通过require()函数引入外部模块
require()可以传递一个文件路径作为参数,node将会自动根据路径来引入外部模块,这里路径如果使用相对路径,必须以.或者…开头
注:使用require()引入模块以后,该函数会返回一个对象,这个对象代表的是引入的模块。var md=require("./module.js")
模块化详解
在node中有一个全局对象global,它的作用和网页中window类似
在全局中创建的变量都会作为global的属性保存
在全局中创建的函数都会作为global发方法保存
-当node在执行模块中代码时,它会首先在代码的最顶部添加如下代码
function(exports,require,module,_filename,dirname){
在代码最底部添加如下代码
}
-实际上模块中代码都包装在一个函数中执行的,并且在函数执行时,同时传递了5个实参
exports:该对象用来将变量或者函数暴露到外部
require:函数,引入外部模块
module:代表当前模块本身 ,exports就是module的属性,既可以使用exports导出或者module.exports
_filename:当前模块的完整路径
dirname:当前模块所在文件夹的完整路径
a=10;
console.log(global.a);
//输出为10
var a=10; //证明它是否运行在函数里,arguments伪数组只存在于函数
//arguments.callee:保存当前执行的函数对象
console.log(arguments.callee +“”);//可以看到函数
node基础-exports和module.exports
通过exports只能使用.的方式来暴露内部变量
exports.xxx=xxx
module.exports既可以通过.的方式,也可直接赋值
module.exports.xxx=xxx或者module.exports={}
var a=10;
var b=a;
a++;
console.log(a);//11
console.log(b);//10
var obj=new Object();//指向内存
obj.name='swk';
var obj2=obj;
obj2.name='zbj';
console.log(obj.name);//zbj
console.log(obj2.name);//zbj
//如果obj2=null
console.log(obj.name);//zbj
console.log(obj2);//null
//变量值改变,其他值不跟着变,对象值改变,其他值会跟着变