Node JS 01 - 基础知识

Node JS 01 - 基础知识

什么是 Node.JS

官网 : https://nodejs.org/zh-cn/

Node JS 01 - 基础知识_第1张图片

  • Node.JS 并不是库和框架, 而是一个基于谷歌 V8 引擎(目前公认的解析执行 JavaScript 代码最快的引擎)的 JavaScript 运行时环境,用来解析和执行 JavaScript 代码,也就是说 JavaScript 可以完全脱离浏览器运行.
    • 浏览器中的 JavaScript
      • ECMAScript : 基本语法
      • BOM
      • DOM
    • Node.JS 中的 JavaScript
      • 没有 BOM DOM
      • ECMAScript
      • 在 Node 这个 JavaScript 执行环境中, JavaScript 提供了一些服务器级别的操作 API
        • 文件读写
        • 网络服务构建
        • 网络通信
        • HTTP 服务器
  • Node.JS 是一个基于事件驱动,非阻塞IO模型(异步)轻量高效的运行时环境.
  • npm 是世界上最大的开源库生态系统, 绝大多数 JS 相关的包都存放在了 npm 上了, 方便开发人员去下载使用. 例如 : npm install jquery

Node.JS 能干什么

  • Web 服务器后台
  • 命令行工具
    • npm(node)
    • git(C语言)
    • hexo(node)

安装 Node.JS

  • 下载 https://nodejs.org/zh-cn/download/
    • LTS : 长期支持版(稳定版)
    • Current : 体验版
  • 安装
    • 傻瓜式安装即可
  • 确认是否安装成功
    • 命令行 : node --version 或简写 node -v
  • 环境变量
    • 配置到 Path 下

Hello World

  1. 编写 JavaScript 脚本文件
var str='Hello World';
console.log(str);
  1. 打开终端, 定位到脚本文件所在目录
  2. 输入 node 文件名 执行对应的文件

解析 JavaScript

Node JS 01 - 基础知识_第2张图片

在这里插入图片描述

注意 : 文件名不能使用 node.js 来命名 , 最好也不要使用中文.

读写文件

// 读取文件

//浏览器中的 JavaScript 没有文件操作的能力
//但是 Node 的 JavaScript 具有文件操作的能力

// fs 是 file-system 的简写, 就是文件系统的意思
// 在 Node 中如果想要进行文件操作,就必须引入 fs 这个核心模块
// 在 fs 这个核心模块中,就提供了所有的文件操纵相关的API

//1. 使用 require 方法加载 fs 核心模块
var fs = require('fs');

//2. 读取文件
//		参数一 : 读取文件的路径
//		参数二 : 回调函数
//			error:
//				如果读取失败,error就是错误对象
//				如果读取成功,error就是null
//			data:
//				如果读取成功,data就是读取到的数据
//				如果读取失败,data就是undefined

fs.readFile('../note/Node.JS.md',function(error,data){
	//默认文件存储的都是二进制数据 0 1
	//可以通过 toString 方法转换为字符串
    //通过判断 error 是否为 null 判断是否有错误
    if(error){
		console.log('读取文件失败');
		return
	}
	console.log(data.toString());
});

//3. 写文件
//	参数一 : 文件路径
//	参数二 : 文件内容
//	参数三 : 回调函数
//		接收参数 : error 错误对象
//			成功 : 文件写入成功 error 为 null
//			失败 : 文件写入失败 error 为错误对象
fs.writeFile('../note/testWrite.txt',"Hello NodeJS",function(error){
	if(error){
		console.log("写入失败!");
	}else{
		console.log("写入成功!");
	}
});

HTTP服务器

//构建服务器
//再 Node 中包含一个核心模块: http
//该模块的职责是帮我们创建编写服务器

//1. 加载 http 模块
var http = require('http');

//2. 使用 http.createServer() 方法创建一个 web 服务器
//	 返回一个 Server 实例
var server = http.createServer();

//3. 服务器对数据的服务
//3-1. 接收请求
//		①服务器接收 request 请求.
//		②触发调用 request 的回调方法.
//		③执行第二个参数,回调处理函数.
//			Request请求对象
//				回调函数接收客户端的请求信息 : 请求信息 请求路径
//			Response 需要对象
//				响应对象可以用来给客户端发送响应信息	
server.on('request',function(request,response){
	// http://localhost:3000/	路径为 : /
	// http://localhost:3000/a	路径为 : /a
	console.log('已经收到请求,请求另为'+request.url);
	//发送响应 write 给客户端响应数据
	//write可以使用多次,但是最后一定要使用 end 来结束响应,否则客户端会一直等待
	response.write('hello');
	//告知客户端已经发送完毕,可以接收了.
	response.end();
});

//4. 绑定端口号,并启动服务器
//	参数一 : 端口号
//	参数二 : 启动成功调用方法
server.listen(3000,function(){
	console.log('服务器启动成功,可以通过 http://localhost:3000 进行访问!');
});

Node 中的 JavaScript

  • ECMAScript
    • 没有 BOM DOM
  • 核心模块
  • 第三方模块
  • 用户自定义模块

核心模块

在 Node 中提供很多服务器级别的 API , 这些 API 绝大多数都被包装到了一个具名的核心模块中了.

例如文件操作的 fs 核心模块, http 服务构建的 http模块,path路径操作 path模块,操作系统模块的os模块…

这些模块如果要使用,必须下引用他 : 例如引入 fs 核心模块

var fs = require('fs');

各个模块都包含许多的 API : https://nodejs.org/dist/latest-v10.x/docs/api/

模块化与通信

  • 在 NODE 中, 模块有三种
    • 具名的核心模块 : 例如 fs http
    • 第三方模块
    • 用户自己编写的模块
      • 用户自己编写的模块在引入(require)必须加 ./ 否则会报错,因为 NODE 会把他当成核心模块
      • 在引入时可以省略后缀名(推荐使用此方法)
  • 在 NODE 中,没有全局作用域,只有模块作用域.
    • 即内部访问不到外部,外部访问不到内部
    • 模块之间的通信 : 比如需要调用其他模块的方法,需要使用 require 来完成.
  • require 方法有两个作用
    • 加载文件模块并执行里面的代码
    • 拿到被加载文件模块导出的接口exports对象,默认为null.

演示 :

  • 模块化

写两个 JS 文件 a.js b.js , 当 a.js 需要引入 b.js 时 , 需要在使用 b.js 的地方使用 var b = require('b.js')

这时就会在执行到需要 b.js 的时候执行 b.js 中的代码 不

a.js

console.log('a start');
// 执行 b.js
require('./b.js');
// 推荐此方法
require('./b');
console.log('a end');

b.js

console.log('b start');
require('./c.js');
console.log('b end');

c.js

console.log('c start');
console.log('c end');

结果

G:\JAVA\笔记\NODE.JS\code\06_模块化>node a.js
a start
b start
c start
c end
b end
a end
  • 通信

但是模块之间的变量是不能共享的, 如下 :

a.js

var bExports = require('./b');
console.log(name);

b.js

var name = 'fly';

运行a.js

ReferenceError: name is not defined
    at Object.<anonymous> (G:\JAVA\笔记\NODE.JS\code\07_加载与导出\a.js:2:28)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

想要通信的话,需要将被外部使用的变量挂载到 exports 中 :

修改 a.js

var bExports = require('./b');
console.log(bExports.name)
console.log(bExports.add(1,2));

修改 b.js

var name = 'fly';
exports.name = name
exports.add = function(a,b){
    return a+b;
}

测试

G:\JAVA\笔记\NODE.JS\code\07_加载与导出>node a.js
fly
3
var bExports = require('./b');
console.log(bExports.name)
console.log(bExports.add(1,2));

修改 b.js

var name = 'fly';
exports.name = name
exports.add = function(a,b){
    return a+b;
}

测试

G:\JAVA\笔记\NODE.JS\code\07_加载与导出>node a.js
fly
3

你可能感兴趣的:(NodeJS,nodejs)