node简介

-node.js是一个能够在服务器端运行javascript的开放源代码、跨平台javascript运行环境
-node采用google开发的V8引擎运行代码,使用事件驱动、非阻塞和异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模

总结:node.js扩展了js的适用范围,从前端到整个系统(浏览器–》服务器)

瑞安·达尔(node之父),node主要借鉴Ruby

所有项目最终的问题都是i/o问题,

node主要是在客户端和服务器间加了一个node服务器,用来渲染页面

nodemanager节点怎么启停 node节点是什么公司_服务器

node的用途

  • WEB服务api,比如REST
  • 实时多人游戏
  • 后端的WEB服务,例如跨域、服务器端的请求
  • 基于WEB的应用
  • 多客户端的通信,如即时通信

node的服务器单线程的

-node处理请求时时单线程,但是后台已拥有一个I/O线程池

-node单线程的解决方法—分布式,多布置几个node服务器

node执行js文件:

外部执行:进入命令行窗口,进到js文件所在的目录下,node 文件名

内部执行:右击run执行(ws)

CommonJS规范

ECMAScript标准的缺陷
  • 没有模块系统
  • 标准库较少
  • 没有标准接口
  • 缺乏管理系统

CommonJS的提出主要是弥补当前javascript没有标准的规范的缺陷

CommonJS对模块的定义:

-模块引用

-模块定义

-模块标识

模块化(module)—将完成的程序按照一定的标准分为小块程序
  • 降低了程序之间的耦合性
  • 提高了代码的复用性

在node中,一个js 就是一个模块

在node中,每一个js文件中的js代码都是独立运行在一个函数中(自执行函数)

而不是全局作用域,所以一个模块中的变量和函数在其他的模块中无法访问

require()函数node引入其他的模块:

在node中,通过require()函数来引入外部的函数

require()可以传递一个文件的路径作为参数,node将会自动根据该路径引入外部模块(每个模块都是封闭的)

这里路径使用相对路径,必须使用…或者.开头

require('./module.js');

使用require()引入模块以后,该函数会返回一个对象(md),这个对象是引入的模块

var md = require('./module.js');
exports向外部暴露属性和方法

只需要将需要暴露给外界的变量和属性设置为exports属性即可

exports.x = '我是module.js 中的x';
exports.fn = function (){};
模块标识

模块标识,使用require()引入外部模块时,使用的就是模块标识(下面的路径’./module.js’就是模块标识),通过模块标识可以找到指定的模块

-模块分为两大类:

核心模块

-由node引擎提供的模块

-核心模块的标识就是模块的名字

文件模块

-由用户自己的创建的模块

-文件模块的标识就是文件的路径(绝对路径和相对路径)

相对路径使用./和…/

var md = require('./module.js');
global

在node中有一个全局对象global,它的作用和网页中的window类似

在全局中创建的变量都会作为global的属性保存

在全局中创建的函数都会作为global的方法保存

注意:

1.当node 在执行模块中的代码时,会在代码顶部添加function (exports,require,module,_filename,__dirname){

代码底部添加}

2.实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递进入了5个实参

exports

该对象时将函数和变量暴露到外部

require

函数,用来引入外部的模块

module

-module代表当前的模块本身

-exports就是module的属性

-既可以使用exports导出,也可以使用module.exports

_filename

当前文件所在的完整路径

_dirname

当前文件夹所在的路径

证明node模块存储的是一个函数

如何证明:在node中,每一个js文件中的js代码都是独立运行在一个函数中?

—使用arguments.callee(这个属性保存的是当前执行函数的对象)


当前文件所在的完整路径

_dirname

当前文件夹所在的路径

证明node模块存储的是一个函数

如何证明:在node中,每一个js文件中的js代码都是独立运行在一个函数中?

—使用arguments.callee(这个属性保存的是当前执行函数的对象)