Node——Node.js基础
对Node.js中的基础知识进行讲解,包括全局变量、全局对象、全局函数以及用于实现模块化编程的exports和module对象等内容,这些知识是学习Node.js应用开发的基础。
1、Node.js全局对象
全局,即程序中任何地方都可以使用,Node.js内置了多个全局变量、全局对象和全局函数,在开发Node.js程序时都可以使用,下面分别对它们进行讲解。
1.1、全局变量
Node.js中的全局变量有两个,分别是__filename和__dirname,它们的说明如下:
- __filename全局变量:__filename表示当前正在执行的脚本的文件名,包括文件所在位置的绝对路径,但该路径和命令行参数所指定的文件名不一定相同。如果在模块中,则返回的值是模块文件的路径。
- __dirname全局变量:__dirname表示当前执行的脚本所在的目录。
例如,下面代码用来分别输出Node.js中两个全局变量的值:
console.log('当前文件名:',__filename);
console.log('当前目录:',__dirname);
程序运行效果如下图所示:
1.2、 全局对象
全局对象可以在Node.js程序的任何地方进行访问,它可以为程序提供经常使用的特定功能。Node.js中的全局对象如下表所示:
接下来分别讲解console对象和process对象的使用。
1、console对象
console对象提供了Node.js控制台的标准输出,其常用方法及说明如下表所示:
(1)console.log()方法:在console.log()方法中,可以使用占位符输出变量(如数字变量、字符串变量和JSON变量等),常用的占位符如下表所示:
例如,下面代码使用%d占位符输出一个整数值:
console.log('变量的值是:%d',57);
上面代码中,在console.log()方法里添加了两个参数。第一个参数是字符串’变量的值是:%d’,第二个参数是数字57。其中,%d是占位符,会寻找后面位置的数字,因为第二个参数57,紧紧跟在后面,所以输出结果如下:
变量的值是:57
使用console.log()方法输出内容时,还可以有多个占位符,示例代码如下:
console.log('%d+%d=%d',273,52,273+52);
console.log('%d+%d=%d',273,52,273+52,52273);
console.log('%d+%d=%d & %d',273,52,273+52);
上面代码运行效果如下:
273+52=325
273+52=325 52273
273+52=325 & %d
观察代码可以发现,第1行代码中,占位符的个数是3个,后面的数字变量的个数也是3个,所以输出结果是“273+52=325”;第2行代码中,占位符的个数是3个,但是后面数字变量的个数是4个,输出结果“273+52=32552273”,说明多出的数字变量52273原样输出;第3行代码中,占位符的个数是4个,但是后面数字变量的个数是3个,输出结果“273+52=325 & %d”,说明多余的占位符没有找到匹配的数字变量,只能原样输出。
使用其他占位符的示例代码如下:
console.log('字符串 %s','hello world','和顺序无关');
console.log('JSON %j',{name:'Node.js'});
上面代码运行效果如下:
字符串 hello world 和顺序无关
JSON {"name":"Node.js"}
(2)console.time()方法和console.timeEnd()方法:console.time()方法和console.timeEnd()方法用来记录程序的执行时间段。console.time()方法用来开始计时,其参数只是起到标识的作用;console.timeEnd()方法用来结束计时,并输出程序运行所需的时间,它在显示结果时,会在标识参数后面自动添加以毫秒为单位的时间。例如,下面代码用来输出执行10的阶乘运算所需要的时间:
//开始计时
console.time('时间');
var output = 1;
for (var i = 1; i <= 10; i++) {output *= i;
}
console.log('Result:', output);
//结束计时,并输出程序执行时间
console.timeEnd('时间');
Result: 3628800
时间: 11.027ms
说明
程序的执行时间不是固定时间,它与计算机配置有关。
2、process对象
process对象用于描述当前程序的状态,与console对象不同的是,process对象只在Node.js中存在,在JavaScript中并不存在该对象。process对象的常用属性及说明如下表所示:
process对象的常用方法及说明如下表所示:
输出process对象常用属性的值:
console.log('- process.env:', process.env);
console.log('- process.version:', process.version);
console.log('- process.versions:', process.versions);
console.log('- process.arch:', process.arch);
console.log('- process.platform:', process.platform);
console.log('- process.connected:', process.connected);
console.log('- process.execArgv:', process.execArgv);
console.log('- process.exitCode:', process.exitCode);
console.log('- process.mainModule:', process.mainModule);
console.log('- process.release:', process.release);
console.log('- process.memoryUsage():', process.memoryUsage());
console.log('- process.uptime():', process.uptime());
运行效果如下:
- process.env: {USERDOMAIN_ROAMINGPROFILE: 'DESKTOP-05BA7LG',LOCALAPPDATA: 'C:\\Users\\XIAOKE\\AppData\\Local',PROCESSOR_LEVEL: '6',……
}
- process.version: v19.0.1
- process.versions: {node: '19.0.1',v8: '10.7.193.13-node.16',uv: '1.43.0',zlib: '1.2.11',brotli: '1.0.9',ares: '1.18.1',modules: '111',nghttp2: '1.47.0',napi: '8',llhttp: '8.1.0',openssl: '3.0.7+quic',cldr: '41.0',icu: '71.1',tz: '2022b',unicode: '14.0',ngtcp2: '0.8.1',nghttp3: '0.7.0'
}
- process.arch: x64
- process.platform: win32
- process.connected: undefined
- process.execArgv: []
- process.exitCode: undefined
- process.mainModule: Module {id: '.',path: 'K:\\nodepro',exports: {},filename: 'K:\\nodepro\\index.js',loaded: false,children: [],paths: [ 'K:\\nodepro\\node_modules', 'K:\\node_modules' ]
}
- process.release: {name: 'node',sourceUrl: 'https://nodejs.org/download/release/v19.0.1/node-v19.0.1.tar.gz',headersUrl: 'https://nodejs.org/download/release/v19.0.1/node-v19.0.1-headers.tar.gz',libUrl: 'https://nodejs.org/download/release/v19.0.1/win-x64/node.lib'
}
- process.memoryUsage(): {rss: 28078080,heapTotal: 6639616,heapUsed: 6031272,external: 455122,arrayBuffers: 17378
}
- process.uptime(): 0.095098
1.3、全局函数
全局函数,即可以在程序的任何地方调用的函数,Node.js主要提供了6个全局函数,其说明如下表所示:
下面对Node.js中全局函数的使用进行讲解。
1、setTimeout(cb,ms)和clearTimeout(t)
这两个全局函数分别用来设置和取消一个定时器,此处需要说明的是,setTimeout(cb,ms)设置的定时器仅调用一次指定的方法。示例代码如下:
var timer=setTimeout(function(){console.log("您将在2秒后看到这句话")
},2000)
//clearTimeout(timer)
运行上面代码,2秒后将会显示如下内容:
您将在2秒后看到这句话
如果将上面代码中的最后一行取消注释,则运行程序时不会输出任何内容,因为虽然前3行代码添加了一个定时器,但是第4行又取消了该定时器,所以在控制台不会输出内容。
2、setInterval(cb,ms)和clearInterval(t)
这两个全局函数分别用来添加和取消一个定时器。其中参数cb为要执行的函数;ms为调用cb函数前等待的时间;t表示要取消的setInterval()方法设置的定时器。使用setInterval()方法设置定时器与使用setTimeout()方法设置定时器的区别是,使用setInterval()方法设置的定时器可以多次调用指定的方法,而使用setTimeout()方法设置的定时器只能调用一次指定的方法。示例代码如下:
var i = 0 //记录执行程序的次数
var timer
timer = setInterval(function () {i += 1console.log("已执行" + i + "次")if (i >= 5) {clearInterval(timer) //执行5次后,取消定时器console.log("执行完毕")}
}, 2000)
运行上面的代码,每隔2秒会显示一次执行函数的次数,直到执行5次以后,取消定时器,最终输出结果如下:
已执行1次
已执行2次
已执行3次
已执行4次
已执行5次
执行完毕
3、setImmediate(callback[,…args])和clearImmediate(immediate)
这两个全局函数用来安排在I/O事件的回调之后立即执行的函数,以及取消setImmediate()创建的Immediate对象。其中,callback参数指的是要执行的函数,immediate参数表示使用setImmediate()创建的Immediate对象。
说明
I/O(input/output)即输入/输出,通常指数据在内部存储器与外部存储器或其他周边设备之间的输入和输出。
示例代码如下:
console.log("正常执行1");
var a = setImmediate(function () {console.log("我被延迟执行了");
});
console.log("正常执行2")
//clearImmediate(a)
上面代码的运行结果如下:
正常执行1
正常执行2
我被延迟执行了
如果将最后一行代码取消注释,则运行结果如下:
正常执行1
正常执行2
2、模块化编程
Node.js主要使用模块系统进行编程,所谓模块,是指为了方便调用功能,预先将相关方法和属性封装在一起的集合体。模块和文件是一一对应的,即一个Node.js文件就是一个模块,这个文件可以是JavaScript代码、JSON或者编译过的C/C++扩展等。下面对Node.js模板化编程中用到的两个对象exports和module进行解析。
2.1、exports对象
在Node.js中创建模块需要使用exports对象,该对象可以共享方法、变量、构造和类等,下面通过一个实例讲解如何使用exports创建一个模块。
使用exports对象实现模块化编程,步骤如下:
(1)在WebStorm中创建一个module.js文件,其中通过exports对象共享求绝对值和计算圆面积的方法,代码如下:
//求绝对值的方法abs
exports.abs = function (number) {if (0 < number) {return number;} else {return -number;}
};
//求圆面积的方法circleArea
exports.circleArea = function (radius) {return radius * radius * Math.PI;
};
(2)在WebStorm中创建一个main.js文件,用来调用前面创建的模块来计算指定值的绝对值及指定半径的圆面积,代码如下:
//加载module.js模块文件
var module = require('./module.js');
//使用模块方法
console.log('abs(-273) = %d', module.abs(-273));
console.log('circleArea(3) = %d', module.circleArea(3));
说明
上面代码中,通过使用require()导入了创建的module.js模块文件。
运行main.js文件,结果如下:
abs(-273) = 273
circleArea(3) = 28.274333882308138
2.2、module对象
在Node.js中,除了使用exports对象进行模块化编程,还可以使用module对象进行模块化编程。module对象的常用属性如下表所示:
使用module对象实现模块化编程,步骤如下:
(1)在WebStorm中创建一个module.js文件,其中定义一个输出方法,然后通过module对象的exports属性指定对外接口,代码如下:
function Hello() {var name;this.setName = function (thyName) {name = thyName;};this.sayHello = function () {console.log(name + ',你好');};
};
module.exports = Hello;
(2)在WebStorm中创建一个main.js文件,用来调用创建的模块以输出内容,代码如下:
var Hello = require('./module.js');
hello = new Hello();
hello.setName('2023');
hello.sayHello();
运行main.js文件,结果如下:
2023,你好
注意
与使用exports对象相比,唯一的变化是使用module.exports = Hello代替了exports。在外部引用该模块时,其接口对象就是要输出的Hello对象本身,而不是原先的exports。
相关文章:

Node——Node.js基础
对Node.js中的基础知识进行讲解,包括全局变量、全局对象、全局函数以及用于实现模块化编程的exports和module对象等内容,这些知识是学习Node.js应用开发的基础。 1、Node.js全局对象 全局,即程序中任何地方都可以使用,Node.js内…...

基于SSM的企业订单跟踪管理系统(有报告)。Javaee项目
演示视频: 基于SSM的企业订单跟踪管理系统(有报告)。Javaee项目 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringM…...
中国吡啶行业市场研究与投资评估报告(2023版)
内容简介: 目前吡啶及其衍生物作为某些化学合成反应的催化剂,需求量在不断增加,因此吡啶在化学品合成领域的市场潜力最大。此外,对高效农药的需求量上升也是促进全球吡啶市场发展的另一关键因素。受人均可支配收入的持续增长和对…...

鼠标点击位置获取几何体对象_vtkAreaPicker_vtkInteractorStyleRubberBandPick
开发环境: Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码 demo解决问题:框选或者点选某一区域,并获取区域prop3D对象(红线内为有效区域,polydata组成的3d几何对象&a…...
【好玩的 Docker 项目】搭建一个简洁的记事本 ——minimalist-web-notepad
前言 搭建一个类似于 notepad 的纯文本笔记本,可以用来做记事本,也可以用来做临时记录的工具。 演示地址:https:/https://chinausdt.com 环境准备 腾讯香港轻量云应用服务器 1 核 1G(24 元 / 月款)域名一枚并做好解析Docker宝塔面板安装 Docker 更新、安装必备软件 BA…...

Linux4.5、进程状态
个人主页:Lei宝啊 愿所有美好如期而遇 目录 进程状态介绍 Linux下具体进程状态 R状态 和 S状态 D状态 T状态 t状态 Z状态 X状态 进程状态介绍 首先,进程状态有运行,阻塞,挂起,这些只是一个大体的概括&am…...

C# Onnx PP-Vehicle 车辆分析(包含:车辆检测,识别车型和车辆颜色)
目录 效果 模型信息 mot_ppyoloe_s_36e_ppvehicle.onnx vehicle_attribute_model.onnx 项目 代码 下载 其他 C# Onnx PP-Vehicle 车辆分析(包含:车辆检测,识别车型和车辆颜色) 效果 模型信息 mot_ppyoloe_s_36e_ppvehi…...

OpenGL之Mesa3D编译for Ubuntu20.04(三十六)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…...

ubuntu22.04 arrch64版操作系统编译zlmediakit
脚本 系统没有cmake,需要通过apt先进行下载,下面的脚本已经包含了 # 安装依赖 gcc-c.x86_64 这个不加的话会有问题 sudo yum -y install gcc gcc-c libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg git openssl-devel gcc-c.x86_64 cm…...

Course1-Week1:机器学习简介
Course1-Week1:机器学习简介 文章目录 Course1-Week1:机器学习简介1. 课程简介1.1 课程大纲1.2 Optional Lab的使用 (Jupyter Notebooks)1.3 欢迎参加《机器学习》课程 2. 机器学习简介2.1 机器学习定义2.2 有监督学习2.3 无监督学习 3. 线性回归模型3.1…...
这19个JS代码技巧,后悔没有早点看到
在实际工作中,开发者常面临一些需巧妙编程解决的挑战。有时几行代码就能迎刃而解。本文整理了一系列实用代码片段,助您轻松处理URL、DOM操作、事件处理、日期处理以及用户偏好设置等常见问题。 这些精选代码片段均源自“30 seconds of code”——一个卓…...

Rust UI开发(一):使用iced构建UI时,如何在界面显示中文字符
注:此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。 iced的基本逻辑是: UI交互产生消息message,message传递给后台的update,在这个函数中编写逻辑,然后通过…...

ros2文件package.xml与cmakelists.txt比较
每次在ros2里面添加文件以后,都要修改packages.xml,与cmakelists.txt文件。...
vue3使用element plus树形选择器懒加载回显失败问题。
vue3使用element plus树形选择器懒加载回显时树形数据还未加载完成,回显时显示的的绑定值,不是要显示的名称。 解决1:不使用懒加载,一次性将数据返回完成 解决2:编辑回显时,拿到要显示的中文强制修改显示…...

Java基于springoot开发的企业招聘求职网站
演示视频: https://www.bilibili.com/video/BV1xw411n7Tu/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 技术:springootmysqlvuejsbootstrappoi制作word模板 主要功能:求职者可以注册发布简历,选择简…...
数据结构 / 顺序表 / 顺序表概述和结构体定义
1. 顺序表概述 顺序表:线性表的顺序存储称为顺序表逻辑结构:线性结构(一对一)存储结构:顺序存储(使用一段连续的存储空间存储类型相同的数据元素)顺序表:逻辑相邻,物理也相邻顺序表是借助于数组实现,但是不…...

js最新随机字符串,进制数随机字符串,更优秀的随机字符串方式,你绝对没用过的随机字符串方式,可控制位数!
js最新随机字符串,进制数随机字符串,更优秀的随机字符串方式,你绝对没用过的随机字符串方式,可控制位数! 函数封装和传参 首先我们,要封装这样一个函数,首先要确定,传入哪些参数。…...
通过内存标记扩展(MTE)提供增强的安全性
目录 一、内存安全BUG导致的安全漏洞 二、检测和修复内存安全漏洞的难点 三、MTE如何应对这一挑战...

深入理解main方法-Java
深入理解main方法-Java 一、语法说明二、特别说明三、动态传值 一、语法说明 public static void main(String[] args)main方法是虚拟机调用的java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是publicjava虚拟机在执行main()方法时不必创建对象&#x…...

C#开发的OpenRA游戏之属性SelectionDecorations(10)
C#开发的OpenRA游戏之属性SelectionDecorations(10) 前面分析了选择属性,继续分析前面的内容,不过这里不再是选择,而是选择相关的属性。 当用玩家选择地图上一个物品,或者士兵,或者坦克时,就会在周边画上一些指示标记,并且有一个状态条。 通过上图,可以看到建筑物周…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...