0
点赞
收藏
分享

微信扫一扫

1.node基础

Node.js诞生史

Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型, 让JavaScript 运行在服务端的开发平台

V8引擎执行Javascript的速度非常快,性能非常好,基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用

  • Node.js之父,Ryan Dahl(瑞安.达尔)
  • 并非科班出身的开发者,在2004年在纽约的罗彻斯特大学数学系读博士
  • 2008年Google公司Chrome V8引擎横空出世,Javascript脚本语言的执行效率得到质的提升
  • 2008年的2月,按新的想法他提交了项目的第一行代码,这个项目的名字最终被定名为“node”
  • 2009年5月,正式向外界宣布他做的这个项目
  • 2009年度,Ruan Dahl在柏林举行了JSConf EU(js峰会)会议上发布了关于 Node.js的演讲,之后nide.js逐渐流行于世;
  • Ryan Dahl于2010年加入Joyent公司【IBM旗下的一个公司】,全职负责node.js项目的开发。从此node.js项目已经从个人项目变成一个公司组织下的项目

Node.js是什么

Node不是编程语言,node也不是服务器,也不是数据库, 他就是一个基于Chrome V8引擎的Javascript运行环境

Node是基于Chrome V8引擎的Javascript运行环境,不要再说node是服务器了

为什么node能够进行文件操作?

Node.js有什么特点

image-20220224163148882

优点

  1. 异步非阻塞的I/O(I/O线程池)

  2. 特别适用于I/O密集型的应用

  3. 事件循环机制

  4. 单线程

  5. 跨平台

缺点

  1. 回调函数嵌套太多,太深(俗称毁掉地狱)
  2. 单线程,处理不好CPU密集型任务

Node特别适合IO密集型应用;Java适合CPU密集型应用;

IO指的是input和output,在服务器端就指的是数据库的操作,那就是说node适用于数据库密集型的操作;

总结:node特别适用于频繁操作数据库的应用

IO密集型和CPU密集型的程序

总结

node常用linux命令

node.js的安装

一键式傻瓜安装

下载地址

https://nodejs.org/en/ 英文版

https://nodejs.org/zh-cn/ 中文版

image-20220226084735082

查看是否安装成功

node -v
node --version
where node  window查看路径
which node  mac查看路径

通过node解析执行js

  1. 创建便携javascript脚本文件
  2. 打开终端,定位到脚本文件所属目录
  3. 输入 node 文件名执行对应的文件
  4. nodejs的后缀名为js

快捷运行方式:安装插件Code Runner,安装成功之后,直接右键执行

image-20220225235520917

node没有dom和bom

node中并没有页面,所以不存在bom和dom

// node不支持window对象
console.log(window); // window is not defined

在node中,采用ECMaScript进行编码,没有bom和dom,和浏览器中的javascript不一样

模块的分类

  • 核心(系统/内置)模块
  • 用户自定义模块
  • 第三方模块

核心模块有:http,fs,path,os,system

核心模块

核心模块有:http,fs,path,os,system;

特点:直接使用,无须下载

他有自己的js文件,只不过被隐藏了

let fs=require('fs'); // 内置模块fs文件操作

let os=require('os');
// 获取当前汲取的CPU信息
console.log(os.cpus());
// memory 内存
console.log(os.totalmem());
// TB GB MB KB Byte bit

let path=require('path');
// extension name 扩展名 获取扩展名
console.log(path.extname('c:/a/b/c/index.html'));

用户自定义模块

自定义模块:自己创建的js文件
使用时,路径必须添加 ./或者…/

// 引入自定义模块的方式
require('b'); // 不可以

require('./b.js'); // 可以

require('./b'); // 推荐:可以省略后缀名
倒入自定义模块
let two = require('./two'); //相对路径,常用
let two = require('../two'); //相对路径,常用
let two = require('/two');  //根目录,不常用
let two = require('c:/a/two'); //根目录,不常用
导出单个自定义模块
let uname = 'jack';
function add(a,b){
    return a+b
}
exports.uname = uname;
exports.add = add;
exports.age = 18;
exports.age = {
  uname:uname,
  add:add,
  age:age
}
集体导出
// 集体导出[只能导出变量]
module.exports = {uname,add}; 

模块和模块之间,默认情况下是互不来往的,可以加载文件,但是在不暴露的情况下是没有办法访问里面的成员的;

有时候加载文件模块的目的,不是为了简单的执行里面的代码;

更重要的是为了使用里面的某个成员或者方法;

解析fs文件操作

fs和http其实就是一个内部js文件,然后在文件的内部有自己的一些成员,咱们在这里只需要引用就可以了;

但是不管是核心模块还是自定义模块 他的使用规则都是一样的; 只不过自定义模块能看到里面的内容,核心模块看不到;

https://github.com/nodejs 查看node源码;核心模块和自定义模块的本质是一样的,都是由各个js文件构成的;

nodejs的require 方法的加载规则

image-20211028194135735

image-20211028194139727

不会重复输出!!!!

可以看出:main去加载a.js,然后a在去加载b.js过程中,并没有打印两次 a.js被加载,Node会直接从require.cache中根据传入的id,取出该对象的exports值,不会再次执行该模块代码。

举报

相关推荐

Node基础

Node——Node.js基础

node的基础

Node基础备注

Node 的语言基础

Node.js基础

Node.JS - 基础

0 条评论