Node初识

目录

一、什么是node.js

定义: 基于chrome v8引擎的javascript 运行环境
特点: 事件驱动,非阻塞式I/O的模型,轻量,高效,单线程、单进程

1.对node的理解

  1. 不是一门语言,核心就是一个让js可以运行在服务端的一个运行时 (我们可以使用js来实现服务端。
    或者工具)
  2. node中只能使用ECMASCRIPT语法本身 (node提供了内置模块可以帮我们做系统级的操作) +npm 包。
  3. 使用node做中间层,和前端处于一个域下,后端没有跨域问题,跨域是浏览器的限制。
  4. 服务端渲染(ssr),node可以解析react,vue语法渲染后返回给浏览器 如:nuxt next。
  5. 打包工具,如:webpack,rollup 前端可以通过node来实现各种各样的工具。
  6. 现在使用node其实做服务端并没有啥优势。

2. nodejs能做什么?

可以解析js代码(没有浏览器安全级别的限制)
提供很多系统级别的API:
文件的读写
进程的管理
网络的通信

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

二、node.js安装

node version manager : node的版本管理 也是一个小工具
目前来说,可以不安装这个nvm,直接安装14.xx.xx的node就可以了,推荐这种安装方式:
地址:http://nodejs.cn/download/


使用nvm安装并维护多个node.js版本
地址:https://github.com/nvm-sh/nvm
windows 安装:
https://github.com/coreybutler/nvm-windows
https://www.cnblogs.com/dreamsqin/p/10885082.html
nvm的相关命令:

  • nvm install 版本号
  • nvm install --lts
  • nvm use 版本号
  • nvm uninstall 版本号
  • nvm ls-remote //查看所有的node 版本信息

三、命令行中的体验

在vsCode中编写一个可执行的js(index.js)文件如下:

function greeting(){
    return "hello node111";
    }
    console.log(greeting());

想要通过node运行此js文件,有两种方法:

1.vsCode运行

(1)首先要在vsCode中,下载一个用于运行的插件:code runner。
Node初识
(2)选中需要运行的代码,点击右键–>run code,此时就会执行js代码并输出。
Node初识
Node初识

2.命令行窗口运行

在存储js文件的文件夹的路径栏输入cmd并回车,打开命令行工具,输入node index.js,在命令行状态下运行node。
Node初识
使用node+js文件名有缺点,就是当改变js文件的内容时,需要手动重启服务器,为了解决这一问题,可以使用一个插件:nodemon,在命令行窗口中输入以下命令,-g表示全局安装。
Node初识
安装成功后使用nodemon运行js文件,在修改文件内容时,服务器会自动重启。
Node初识

三、Node环境和浏览器环境的区别

NodeJS环境和浏览器环境一样都是一个JS的运行环境, 都可以执行JS代码.
但是由于宿主不同所以特点也有所不同

(1)内置对象不同
浏览器环境中提供了window全局对象。NodeJS环境中的全局对象不叫window, 叫global。
(2)this默认指向不同
浏览器环境中全局this默认指向window。NodeJS环境中全局this默认指向空对象{}。
(3)API不同
浏览器环境中提供了操作节点的DOM相关API和操作浏览器的BOM相关API。NodeJS环境中没有HTML节点也没有浏览器, 所以NodeJS环境中没有DOM/BOM。

四、 Node全局对象上的属性

  1. 中文文档地址: http://nodejs.cn/api/
  2. __dirname: 当前文件所在文件夹的绝对路径
  3. __filename: 当前文件的绝对路径
  4. setInterval / clearInterval : 和浏览器中window对象上的定时器一样
  5. setTimeout / clearTimeout : 和浏览器中window对象上的定时器一样
  6. console : 和浏览器中window对象上的打印函数一样
console.log(__dirname);
console.log(__filename);
console.log("abc");
/*
setTimeout(function () {
console.log("123");
}, 2000);
*/
setInterval(function () {
console.log("123");
}, 1000);

Node初识

五、node.js模块

在 Node.js 模块系统中,每个文件都被视为一个独立的模块。
Node初识

1.CommonJS规范

CommonJS规范规定了如何定义一个模块, 如何暴露(导出)模块中的变量函数, 以及如何使用定义好的
模块

  1. 在CommonJS规范中一个文件就是一个模块
  2. 在CommonJS规范中每个文件中的变量函数都是私有的,对其他文件不可见的
  3. 在CommonJS规范中每个文件中的变量函数必须通过exports暴露(导出)之后其它文件才可以使用。
  4. 在CommonJS规范中想要使用其它文件暴露的变量函数必须通过require()导入模块才可以使用

参考网站地址:
1)http://www.commonjs.org
2)http://javascript.ruanyifeng.com/nodejs/module.html

2.Node模块导出数据的几种方式

  1. 通过exports.xxx = xxx导出
  2. 通过module.exports.xxx = xxx导出
  3. 通过global.xxx = xxx导出

注意点:
无论通过哪种方式导出, 使用时都需要先导入(require)才能使用
通过global.xxx方式导出不符合CommonJS规范, 不推荐使用

module.exports = "字符串";//可以的
module.exports.msg = '字符串'//可以的
exports.msg = '字符串'//可以的
exports = '字符串'//不行的

3.导入和导出

方案一:
导出:
exports.xxx = xxx 或 module.exports.xxx = xxx 可以导出N个数据
导入:
let res = require("./a") res是一个对象,对象中包含了N个数据
方案二: module.exports后面的导出会覆盖前面的导出
导出:
module.exports = “hello” 导出hello
导入:
let res = require("./a") res就是一个hello、
导出:
module.exports = { name:“wc”,age:100 } 导出一个对象
导入:
let res = require("./a") res就是一个对象
强调:

  1. 每个文件就是一个模块,在模块里面定义的变量、函数、类都是私有的
  2. module 代表的当前模块 ,exports属性,代表向外提供接口(数据)
  3. require加载模块,读取并执行一个js文件,然后返回该模块的exports对象
  4. 模块加载的顺序,按照代码中出现的顺序
  5. 模块可以多次加载,第一次加载运行之后,会被缓存,第2次开始,就从缓存中取,就不会重新加载

4.require内部处理流程步骤

  1. 检查Moducle._cache, 是否缓存了指定模块
  2. 如果缓存没有的话,就创建一个新的module实例将它保存到缓存
  3. module.load()去加载指定的模块2.2 exports和module.exports区别
    2.3 require注意点
    2.4 内置js模块
    path模块:
  4. 如果解析的过程中,出现异常,就从缓存中删除该模块
  5. 返回该模块的module.exports

5. exports和module.exports区别

  1. exports只能通过 exports.xxx方式导出数据, 不能直接赋值
  2. module.exports既可以通过module.exports.xxx方式导出数据, 也可以直接赋值

注意点:
在企业开发中无论哪种方式都不要直接赋值, 这个问题只会在面试中出现。

6.require注意点

(1) require导入模块时可以不添加导入模块的类型
如果没有指定导入模块的类型, 那么会依次查找.js .json .node文件。无论是三种类型中的哪一种, 导入之后都会转换成JS对象返回给我们。
(2) 导入自定义模块时必须指定路径
require可以导入"自定义模块(文件模块)"、“系统模块(核心模块)”、“第三方模块”。导入"自定义模块"模块时前面必须加上路径。导入"系统模块"和"第三方模块"是不用添加路径。
(3) 导入"系统模块"和"第三方模块"是不用添加路径的原因
如果是"系统模块"直接到环境变量配置的路径中查找。如果是"第三方模块"会按照module.paths数组中的路径依次查找。

五、内置js模块

const http = require('http');
const qs = require('querystring');
const fs = require('fs') //涉及文件的读写....
const url = require('url');
const path = require('path');
var rs = path.resolve(__dirname, '../dev/');
console.log(rs);

例:path模块

const path = require('path'); // 处理路径的
// 默认解析的路径 是以process.cwd() chdir去更改
// __dirname 文件所在的目录 不能更改的
// 你给我一个相对路径 我还你个绝对路径,有拼接的功能,
path.resolve(__dirname,'index.md','abc')
console.log(path.resolve(__dirname,'index.md'));
// 只是简单的拼接
console.log(path.join(__dirname,'index.md'));
// 总结:如果遇到带/的路径 resolve 会认为是根路径 join则是拼接在一起
console.log(path.extname('a.min.js')); // .js 取后缀名
console.log(path.relative('a','a/a.js')); // 去掉相同的部分

Node初识

六、第三方模块

所谓的第三方模块,就是别人写好的模块,我们需要下载下来使用它。
如果jquery就是一个第三方模块,要用第三方模块,先下载。
通过npm来下载:例:npm install jquery,install可以写成i。
Node初识


一个项目, 可能有N个第三方模块,我们就需要一个文件,来记录你项目中都使用了哪些第三方模块,在写项目时,先需要创建这样一个配置文件,它的主要作用就是记录,你的项目中都用到了哪些第三方模块。

如何生成这个配置文件呢?

答: 通过npm init,然后一路回车,就生成一个叫package.json文件,这个文件就是项目的配置文件,这个配置文件的主要作用是记录项目所用的第三方模块(依赖),如果你不想那么麻烦,可以直接输入npm init -y
Node初识


安装好的第三方模块会放在node_modules这个文件夹中的。
模块:一个文件就是一个模块。
包:N个文件,放在一个文件夹中,就形成一个包,安装一jquery,最终就是一个包(依赖)
Node初识

七、自定义模块

function HelloNode() { }
HelloNode.prototype = {
	count() {
		return 38;
	},
	getStudentlist() {
		return [
			{
			name: 'wangcai',
			age: 18
			},
			{
				name: 'xiaoqiang',
				age: 20
			}
		]
	}
}
module.exports = new HelloNode();

八、 YARN使用

如果使用npm就一直使用npm,如果用yarn,就一直使用yarn,不要混用,混用肯定会出问题。

1.什么是YARN?

  1. Yarn是由Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具
  2. Yarn 是为了弥补 npm5.0之前 的一些缺陷而出现的

注意点:
(1)在npm5.0之前,yarn的优势特别明显.但是现在NPM已经更新到6.9.x甚至7.x了。
(2)随着NPM的升级NPM优化甚至超越Yarn,所以个人还是建议使用NPM。

2.YARN的安装和使用

(1)安装
npm install -g yarn
yarn --version
(2)使用
1.初始化包
npm init -y
yarn init -y
2.安装包
npm install xxx --save
yarn add xxx
npm install xxx --save-dev
yarn add xxx --dev
3.移除包
npm uninstall xxx
yarn remove xxx
4.更新包
npm update xxx
yarn upgrade xxx --latest
5.全局安装
npm install -g xxx
npm uninstall -g xxx
npm update -g xxx
yarn global add xxx
yarn global upgrade xxx
yarn global remove xxx

上一篇:iptable防火墙案例


下一篇:java 上传POJO model jar