Node.js是什么(基础篇)

前言

Node.js是一个基于Chrome V8 JavaScript引擎的开源、跨平台JavaScript运行时环境,主要用于开发服务器端应用程序。它的特点是非阻塞I/O模型,使其在处理高并发请求时表现出色。

一、Node JS到底是什么

1、Node JS是什么

  1. Node.js不是一种独立的编程语言
  2. Node.js不是JavaScript框架
  3. Node.js是一个JavaScript运行环境

2、Node.js 与JavaScript是什么关系?

  1. Node.js与JavaScript的关系
  • 层面: Node.js使用的编程语言是JavaScript。这意味着在Node.js中编写的代码语法与浏览器中的JavaScript代码语法基本相同。
  • 运行环境: 浏览器中的JavaScript运行在浏览器提供的环境中,而Node.js中的JavaScript运行在Node.js提供的运行时环境中。浏览器和Node.js都基于V8引擎,但Node.js提供了额外的API,使其更适合服务器端开发。
  1. Node.js扩展了JavaScript的能力

Node.js不仅仅是JavaScript的运行时环境,它还提供了一些独特的特性,使JavaScript在服务器端更加强大:

  • 非阻塞I/O: Node.js采用事件驱动和非阻塞I/O模型,适合处理高并发请求。
  • 模块系统: Node.js使用CommonJS模块系统,允许开发者将代码分割成独立的模块。
  • 内置API: Node.js提供了一系列内置API,用于文件系统操作、网络通信、流处理、子进程管理等。

二、Node JS本地环境搭建

1、安装Node.js

从Node.js官网下载并安装Node.js,安装完成后可以使用以下命令验证安装是否成功

Node JS官网

node -v
npm -v

三、文件操作与模块化的概念

1、文件操作

  1. 文件读取

创建read.js文件

var fs = require("fs");
fs.readFile("./text.txt", "utf8", function (err, data) {console.log(err);console.log(data);
});

创建text.txt文件

hello world

通过node read.js命令进行读取

node read.js

image.png

  1. 文件写入

创建write.js文件

var fs = require("fs");
fs.writeFile("./text.txt", "world hello", function (err) {console.log(err);
});

通过node write.js命令进行读取

node write.js

image.png

text.txt文件内容被写入

hello world-> world hello

  1. 文件追加

创建file.js文件

var fs = require("fs");
fs.readFile("./text.txt", "utf8", function (err, data) {if (!err) {var newData = data + "welcome";fs.writeFile("./text.txt", newData, function (err) {if (!err) {console.log("追加内容成功");}});}
});

通过node file.js命令进行读取

node file.js

image.png

text.txt文件内容被写入

hello world-> hello worldwelcome

2、模块化编程

模块化编程是一种软件设计和开发的方法,通过将程序分解成独立、互相协作的模块来提高代码的可维护性、可读性和可重用性。每个模块通常实现特定的功能,并且可以独立开发、测试和部署。模块化编程广泛应用于现代软件开发中,包括前端和后端开发。

  1. 模块的定义

模块是一个封装了特定功能或一组相关功能的代码单元。模块可以是一个文件、一组文件或一个包。

  • 接口:模块向外界提供的功能(方法、属性等),即模块的公开API。
  • 实现:模块内部实现细节,对外界不可见,只能通过接口访问。
  1. 模块化编程的优点
  • 高内聚低耦合:模块内的代码高内聚,而模块之间的耦合度低,提高了代码的可维护性。
  • 可重用性:模块可以在不同的项目中重复使用,提高开发效率。
  • 易于调试和测试:独立的模块可以单独调试和测试,简化了开发过程。
  • 团队协作:不同的开发人员可以并行开发不同的模块,提升团队协作效率。
  1. JavaScript中的模块化
  • CommonJS模块系统(Node.js)

Node.js使用CommonJS模块系统,通过require引入模块和module.exports导出模块。

// math.js
exports.add = function(a, b) {return a + b;
};
// app.js
const math = require('./math');
console.log(math.add(2, 3));  // 5
  • ES6模块系统(浏览器和Node.js)

ES6引入了模块系统(ESM),使用import和export关键字。

// im.mjs
import { val } from "./ex.mjs";
console.log(val);
// ex.mjs
var val = "ex data";
export { val };
node im.mjs

如果直接只用js编译需要再packjson.json中加入{“type”:“module”}

"type":"module"
  • AMD

AMD是一种用于浏览器环境的模块化规范,旨在解决JavaScript模块的异步加载问题。它通过异步方式加载模块,从而避免阻塞浏览器的运行。RequireJS是一个实现AMD规范的库。

定义模块

// 定义一个名为'math'的模块
define('math', [], function() {return {add: function(a, b) {return a + b;},subtract: function(a, b) {return a - b;}};
});

加载模块

require(['math'], function(math) {console.log(math.add(1, 2));  // 3
});
  • UMD

UMD是一种模块定义模式,旨在兼容多种模块系统,如CommonJS、AMD和全局变量。这使得模块可以在不同的环境中(如浏览器和Node.js)无缝运行。

(function (root, factory) {if (typeof define === 'function' && define.amd) {// AMD. Register as an anonymous module.define([], factory);} else if (typeof module === 'object' && module.exports) {// Node. Does not work with strict CommonJS, but// only CommonJS-like environments that support module.exports,// like Node.module.exports = factory();} else {// Browser globals (root is window)root.myModule = factory();}
}(typeof self !== 'undefined' ? self : this, function () {// 模块代码return {add: function(a, b) {return a + b;},subtract: function(a, b) {return a - b;}};
}));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/32646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++ - 编码规范(USNA版)

[IC210] Resources/C Programming Guide and Tips 所有提交的评分作业(作业、项目、实验、考试)都必须使用本风格指南。本指南的目的不是限制你的编程,而是为你的程序建立统一的风格格式。 * 这将有助于你调试和维护程序。 * 有助于他人&am…

USB - USB在消费领域的应用

Switching in USB Consumer Applications 通用串行总线(USB)已成为满足终端设备之间日益增长的快速数据传输需求的主流接口--例如,在个人电脑和便携式设备(如手机、数码相机和个人媒体播放器)之间下载和上传数据。 The…

IP地址解析省份区域信息

背景 最近工作需要根据IP地址,解析通话所在省份。因此,在网上找了相关方案,作为存档记录下来。 在线接口 不做阐述。因为,一是网上可以很轻松的找到,没有必要多说。二是开发在内网中,多数不会让连接外网…

Go WebSocket入门+千万级别弹幕系统架构设计

Go实现WebSocket(千万级别弹幕系统架构设计) 1 websocket简介(基于HTTP协议的长连接) 使用WebSocket可以轻松的维持服务器端长连接,其次WebSocket是架构在HTTP协议之上的,并且也可以使用HTTPS方式,因此WebSocket是可靠…

QT事件处理系统之一:父子组件之间的事件传播机制

1、一些解释 /*1. 事件传播(非常重要):GUI编程当中, 事件的传播是[基于组件层面]的, 并不是依靠类继承机制!类的继承:QWidget <- QPushButton <- FirstButton <- SecondButton基于组件(父子组件):QWidget <- QPushButton(FirstButton/SecondButton);虽然…

国产化操作系统杂谈

目录 操作系统国产化背景国产化操作系统名录优秀操作系统介绍1.深度Linux&#xff08;deepin&#xff09;2.FydeOS3.AliOS&#xff08;openAliOS&#xff09;4.openEuler5.红旗Linux6. startOS 总结 操作系统国产化背景 官方的说法是为了打破长期以来国外对中国的操作系统的垄…

OGG几何内核开发-复杂装配模型读取、显示、分析

OGG几何内核读取STEP模型文件的API有STEPCAFControl_Reader、STEPControl_Reader。 STEPCAFControl_Reader使用很复杂&#xff0c;但可以展示装配树&#xff0c;有利于模型的详细分析。 本文演示了《插件化算法研究平台V2》的OCC几何模型插件的部分功能&#xff1a;显示装配树…

四川汇聚荣科技有限公司靠谱吗?

在如今这个信息爆炸的时代&#xff0c;了解一家公司是否靠谱对于消费者和合作伙伴来说至关重要。四川汇聚荣科技有限公司作为一家位于中国西部地区的企业&#xff0c;自然也受到了人们的关注。那么&#xff0c;这家公司究竟如何呢?接下来&#xff0c;我们将从多个角度进行深入…

Python应用开发——30天学习Streamlit Python包进行APP的构建(8)

st.table 显示静态表格。 这与 st.dataframe 的不同之处在于,这里的表格是静态的:其全部内容直接显示在页面上。 Function signature[source]st.table(data=None) Parametersdata (pandas.DataFrame, pandas.Styler, pyarrow.Table, numpy.ndarray, pyspark.sql.DataFrame,…

Mysql数据库约束的概述 , 逐渐约束 , 主键自增 , 表关系的概念和外键 ,多表关系约束介绍和使用

约束和表设计 1、DQL查询语句-limit语句(掌握) 目标 能够掌握limit语句的使用 讲解 作用&#xff1a; LIMIT是限制的意思&#xff0c;所以LIMIT的作用就是限制查询记录的条数。 LIMIT语句格式: select * from 表名 limit offset, row_count; mysql中limit的用法&#…

面试题4:POST 比 GET 安全?

不是。HTTP就没有加密功能。 我们知道 GET一般将参数放到URL的查询字符串中&#xff0c;如果是实现登录页面&#xff0c;我们的用户名和密码就直接显示到浏览器的地址栏中了&#xff0c;此时就会轻易的被他人获取账号密码&#xff0c;很不安全。而POST会把参数放到 body 里&am…

uniapp——H5添加支付宝授权登录,报错:系统异常,请联系商家。REDIRECT_URI_ILLEAGAL

解决方法 https://opensupport.alipay.com/support/FAQ/41bb980b-d18e-4141-8063-9d172cb7e655 这其中最常见的是授权的回调地址配置的不正确 应该为域名后面加上你H5打包后的名字&#xff0c;例如 https://www.xxx.com/agent要正确配置支付宝授权登录的回调地址&#xff0c;…

Flutter框架高阶——Window应用程序设置窗体窗口背景完全透明

文章目录 1.修改 main.cpp1&#xff09;C 与 Win32 API2&#xff09;EnableTransparency()3&#xff09;中文注释 2.编写 Flutter 代码1&#xff09;bitsdojo_window2&#xff09;window_manager3&#xff09;区别对比4&#xff09;同时使用&#xff08;1&#xff09;设置初始化…

C++精解【4】

文章目录 正则表达式基础regex_matchregex_replaceswap Eigen概述简单例子 正则表达式 基础 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普…

银行卡二要素核验-银行卡二要素核验接口-银行卡二要素核验API

接口地址&#xff1a;https://www.wapi.cn/api_detail/102/235.html 在线查询&#xff1a;https://www.wapi.cn/bank_name_verfiy.html 网站地址&#xff1a;https://www.wapi.cn 返回格式&#xff1a;json,xml 请求方式&#xff1a;POST,GET POST 请求需要设置Header头&#x…

winRar去广告记录

效果&#xff1a;双击winRar.exe&#xff0c;不会弹出广告窗口&#xff0c;但会弹出使用时间许可警告&#xff0c;效果不是很完美。 工具&#xff1a;everything.exe&#xff08;非必须&#xff09;、sublime text&#xff08;非必须&#xff09;、spyxx.exe&#xff08;非必须…

‘eigen2cv’ is not a member of ‘cv’ 的参考解决方法

文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu 20.04&#xff0c;OpenCV 4.2.0 一、问题描述 /home/xxx/xxx/xxx/xxx.cpp:248:9: error: ‘eigen2cv’ is not a member of ‘cv’; did you mean ‘eigen’?248 | cv:…

【Python】已解决:pymssql引发的MSSQLDatabaseException错误

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;pymssql引发的MSSQLDatabaseException错误 一、分析问题背景 在Python中使用pymssql库与Microsoft SQL Server数据库交互时&#xff0c;有时会遇到pymssql._mss…

Vim常识

文章目录 Vim复制某行到下一行Vim回滚操作Vim查找 Vim复制某行到下一行 命令模式下 YYp Vim回滚操作 命令模式下 uu 表示undo Vim查找 命令模式下 /keyword -> forward search ?keyword -> backward search shift g -> to the bottom line

系统安全设计规范(Word原件)

1.1安全建设原则 1.2 安全管理体系 1.3 安全管理规范 1.4 数据安全保障措施 1.4.1 数据库安全保障 1.4.2 操作系统安全保障 1.4.3 病毒防治 1.5安全保障措施 1.5.1实名认证保障 1.5.2 接口安全保障 1.5.3 加密传输保障 1.5.4终端安全保障 资料获取&#xff1a;私信或者进主页。…