Node.js

作者: YT_Zou | 来源:发表于2017-01-12 15:17 被阅读0次

简单的说 Node.js 就是运行在服务端的 JavaScript。

  • Node.js 是一个基于Chrome JavaScript 运行时,使用C++编写,建立的一个平台。本质上是JavaScript的运行环境;
  • Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

优点:

  • 可以解析JS代码(没有浏览器安全级的限制)
  • 提供系统级别的API
    1.文件的读写
    2.进程的管理
    3.网络通信

node.js让JavaScript流畅的运行在服务器端,彻底打破了前后端的语言边界

以下是推荐的四个网站:
  • nodejs.org (官网)
  • nomjs.org
  • github 搜索node关键词
  • stackoverflow.com

安装Node.js

1.nodejs的版本:
偶数位为稳定版本 奇数位为不稳定版本
-0.6.x -0.7.x
-0.8.x -0.9.x
-0.10.x -0.11.x
2.安装
  1.下载并安装git Bash(客户端工具,可以执行git命令。。)
  2.打开nodejs.org(官网),下载并安装node.js
  3.打开命令窗口,输入node -v(判断node是否安装好并查看版本号)
  4.输入npm -v(判断npm是否安装好并查看版本号)
  5.输入node  (进入他的环境,可以做简单的运算方法)

简单小例子:

1.新建server.js文件

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello Node.js\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

2.在命令行输入node server.js

3.在浏览器中输入127.0.0.1:3000

4.在命令行中使用快捷键Ctrl+C可停止之前的服务

Node.js防止变量污染,模块互不影响

约定了JavaScript怎么去组织编写


规范与实现的互为促进

模块与包管理工具

js的天生缺陷——缺少模块化管理机制
表现>> JS中容易出现变量被覆盖,方法被替代的情况(既被污染)。特别是存在依赖关系时,容易出现错误。这是因为JS缺少模块管理机制,来隔离实现各种不同功能的JS判断,避免它们相互污染。
解决>> 经常采用命名空间的方式,把变量和函数限制在某个特定的作用域内,人肉约定一套命名规范来限制代码,保证代码安全运行。jQuery中有许多变量和方法,但是无法直接访问,必须通过jQuery,$调用 各个方法。

Commonjs规范- [ ]

不同于jQuery,Commonjs是一套规范,约定了js如何组织,如何编写,包括包,二进制,套接字,单元测试等等。大部分标准在拟定和讨论之中,首先把执行不同任务的代码块和代码文件看为独立的模块,每一个模块都是一个单独的作用域,但不是孤立的,可能存在依赖关系。每个模块分为三个部分,定义、标识和引用。这套规范与现实产品如node.js相互影响,良性循环。

NodeJs的模块管理机制

node.js借鉴了commonjs的这种理念,并基于Commonjs,实现了一套模块管理系统,node中每一个js文件都是一个独立的模块,在其内部不需要有命名空间,不需要担心变量的污染和方法定义时的隔离。同时模块之间可以组合形成更强大的模块或功能包。npm即是用来管理各种功能包的。

nodejs模块分类:

在nodejs中可以通过文件路径或文件名来引入模块,如果用名称引用非核心模块的话,node最终会把模块映射到对应的模块文件的路径,那些包含了核心函数的核心模块会在node启动时被预先加载。非核心模块包括使用npm安装的第三方模块或自己创建的本地模块。

模块分类.png

模块的流程

  1.创建模块 => 入口js文件,加入特定的功能
  2.导出模块 => 把功能和文件名也就是模块名建立关系
  3.加载模块 => 在其他文件里面引入并加载这个模块
  4.使用模块 => 直接调用模块中命名好的方法
模块的流程.png

以下是一个简单的例子:

1.新建student.js文件

function add(student){
    console.log("Add Student:"+student);
}

exports.add = add;

2.新建teacher.js文件

function add(teacher){
    console.log("Add Teacher:"+teacher);
}

exports.add = add;

3.新建klass.js文件

var student = require('./student');
var teacher = require('./teacher');

// teacher.add('Wangxiaoming');

function add(teacherName,students){
    teacher.add(teacherName);

    students.forEach(function(item,index){
        student.add(item);
    })
}

exports.add = add;

// module.exports = add;

3.新建index.js文件

var klass = require('./klass');

klass.add('ZYT',['高富帅','白富美']);

// exports.add = function(kclasses){
//  kclasses.forEach(function(item,index)){
//      var _kclass = item;
//      var teacherName = item.teacherName;
//      var students = item.students;

//      kclass.add(teacherName,students);
//  }
// }

4.在命令行中输入node index

nodejs中exports与module.exports的区别

http://www.cnblogs.com/pigtail/archive/2013/01/14/2859555.html

其实,Module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports。

所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。
如果你想你的模块是一个特定的类型就用Module.exports。如果你想的模块是一个典型的“实例化对象”就用exports。
前面已经提到module.exports是真正的接口,exports只不过是它的辅助工具。推荐使用exports导出,除非你打算从原来的“实例化对象”改变成一个类型。

相关文章

  • nodejs安装

    Node.js安装 目录 Node.js简单介绍 windows安装Node.js Linux安装Node.js ...

  • node.js基础

    什么是node.js Node.js特点 node.js优点和缺点

  • Nodejs.2

    参考内容:Node.js EventEmitter 四、Node.js EventEmitter Node.js所...

  • nodejs第一步

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

  • node 学习笔记.md

    Node.js第一天 1. 初识Node.js 1.1 Node.js是什么 Node.js® is a Java...

  • Node.js学习

    主线:Node.js是什么 --> Node.js的组成 --> Node.js的特点 --> Helloworl...

  • 使用AngularJS搭建前台框架

    Node.js部署: 下载安装包:从Node.js官网下载Node.js安装包。 安装Node.js:打开node...

  • Node.js模块

    Node.js 模块和 Node.js 包介绍。 一、Node.js模块 每一个Node.js都是一个Node.j...

  • 小鹅通视频下载mac 小鹅通课程下载教程

    前两天,Node.js官方发布了Node.js 15的正式版本,Node.js 15 将替代 Node.js 14...

  • node学习笔记

    node.js 介绍 node.js初识 node.js 平台是基于 Chrome V8 JavaScript 引...

网友评论

    本文标题:Node.js

    本文链接:https://www.haomeiwen.com/subject/ujbdbttx.html