Node.js学习笔记

回顾:

javascript 可以在浏览器运行  (js代码会JavaScript的解析引擎执行)chrome  ==》V8 (性能最好)FireFox  ==》 奥丁猴safri  ==》JSCoreIE浏览器 ==》查克拉JavaScript可以在浏览器端操作DOM 和BOM每一个浏览器都内置了BOM,DOM这样的API函数,所以浏览器中的js才可以调用他们浏览器中JavaScript的运行环境V8引擎负责解析和执行js代码内置API是由运行环境提供的特殊接口,只能在所属的运行环境中调用总结:浏览器是JavaScript的前端运行环境JavaScript语法  +浏览器内置的API (DOM+BOM)+ jquery第三方库

node.js:

node是让JavaScript运行在服务端上的环境

Node.js是JavaScript的后端运行环境
Node.js中无法调用BOM,DOM等浏览器内置的API 
Node.js它内置的API : fs,path,http...http://nodejs.cn/api/

Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境。

下载node:

下一步下一步安装就可以

检测是否安装成功:

windows+R 打开运行 — 输入cmd —打开命令窗口

node -v
v16.15.0
npm -v
# 8.5.5  (安装node的同时 也安装了npm)

出现版本号,说明安装成功

如何学习node:

javascript基础语法 +Node.js内置API(fs,path,http) +第三方模块(express)

在node环境中运行js代码:

  • 新建目录mycode,目录下新建01test.js文件
    let name = '张三'
    console.log(name)
    var arr = [11, 22, 33, 44, 55]
    arr.forEach((item) => {console.log(item)
    })
    
  • node环境下运行js代码(第一种)
    • 打开js文件所在目录
    • 在目录地址栏上输入cmd ,回车(确保命令窗口的地址是js文件的目录地址)
    • 输入命令 node 01test.js (输入文件名按tab)
  • node环境下运行js代码(第二种)
    • 打开js文件所在目录
    • 按住shift+右击 在此处打开powershell窗口
    • 输入命令 node 01test.js (输入文件名按tab)
  • node环境下运行js代码(第三种)
    • 在vscode中 点击文件右击 打开集成终端
    • 输入命令 node 01test.js (输入文件名按tab)

终端快捷键:

上键    快速定位到上一次执行命令
tab    快速补全
esc    清空当前输入命令
cls    清空终端

Node三大模块:

内置模块:

安装了node就会有,(Node官方提供 fs,http,path…)

fs:
/***fs文件系统模块 fs模块是NodeJS官方提供,用来操作文件的模块,它提供了一些列的方法和属性,满足用户对文件的需求* *///  2引入fs模块 来操作文件
var fs = require('fs')/* 
fs.readFile(path[,options],callback)
path  读取文件路径
options  读取文件时采用的编码方式 utf-8
callback  回调函数,可以拿到读取失败和成功的结果 err  data
*/fs.readFile('./aa.txt', 'utf8', function (err, data) {// console.log(err) //null  读取成功-null   读取失败 err值为错误对象// console.log(data) //读取失败  值为undefinedif (err) {return console.log('读取文件失败')}console.log(data)
})// 写入文件
/* 
fs.writeFile(file, data[, options], callback)#
file 文件路径
data要写入文件的数据
options 写入文件时采用的编码方式 utf-8
callback  回调函数  err写入成功和失败的信息
*/
let content = '<h3>正在使用fs.writeFile写入文件内容</h3>'fs.writeFile('./index.html', content, function (err) {// console.log(err)if (err) {return console.log('文件写入失败')}console.log('文件写入成功')
})
path:

系统内置的路径模块,用于处理文件和目录的路径

/* 
系统内置的路径模块,用于处理文件和目录的路径
*/const path = require('path')// path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起
console.log(path.join('/foo', 'bar', 'baz/asdf', 'quux', '..'))console.log(__dirname) //当前文件目录名  绝对路径  //C:\丁鹿课堂\17期\08node\day01-node\mycode
console.log(__filename) //C:\丁鹿课堂\17期\08node\day01-node\mycode\03path.js
http:

Node.js提供了http模块,http模块主要用于搭建HTTP服务端,调用HTTP模块

在这里插入图片描述

const http = require('http')const fs = require('fs')
const url = require('url')/* 
url.parse() 方法会解析一个 URL 字符串并返回一个 URL 对象。
*/
// 创建服务
http.createServer(function (request, response) {// console.log(123)// 解析请求 包含文件名// console.log(request.url)var pathname = url.parse(request.url).pathname// console.log(pathname.substr(1))fs.readFile(pathname.substr(1), function (err, data) {if (err) {console.log(err)response.writeHead(404, { 'Content-Type': 'text/html' })} else {response.writeHead(200, { 'Content-Type': 'text/html' })// 响应文件内容response.write(data.toString())}// 发送响应数据response.end()})}).listen(8080)console.log('server running at http://127.0.0.1:8080')
自定义模块:

自定义模块就是自己定义的模块

注意:

自定义模块中定义的方法,变量只能在当前的模块中使用

加载模块:require() 可以引入需要的内置模块,用户自定义模块,第三方模块

向外共享:每个js自定义模块中都有一个module对象,它里面存储了和当前模块有关的信息

定义模块aa.js:
const arr = [11, 22, 33]// 向外暴露
module.exports.arr = arr
定义模块bb.js:
const arr = [{ name: '张三', age: 12 },{ name: '李四', age: 22 },{ name: '王五', age: 33 },
]module.exports.arr = arr
index.js中使用两个模块:
const arr1 = require('./aa.js')const arr2 = require('./bb.js')console.log(arr1)
console.log(arr2)
其他:
let a = 10
const fn = function () {console.log(123)
}console.log(exports === module.exports) //true
// exports.a = a// exports = {
//   a: a,
// }
// module.exports.fn = fnexports.a = a
module.exports = {fn: fn,
}
/* 
module.exports单词写起来比较复杂,为了简化向外共享成员的代码,node提供了exports对象exports和module.exports指向的是同一个对象exports和module.exports指向不同的对象,以module.exports为准*/
第三方模块:

Node中的第三方模块(别人写好的模块) 又叫做包

包的来源:

不同于Node.JS的内置模块和自定义模块,包是由第三方个人和团队开发出来的,免费使用

为什么要使用包:

NodeJS提供的api开发效率低

基于内置模块封装出来,提供了更高级,更方便的API,极大的提高了工作效率

下载包:

国外的一家IT公司,叫做npm 这家公司的著名的网址https://www.npmjs.com/是全球最大的包共享平台

https://registry.npmjs.org/对外共享所有的包。我们可以从这个服务器下载自己所需要的包

https://www.npmjs.com/  网站上搜索自己所需要的包
https://registry.npmjs.org/  服务器上下载自己需要的包
如何下载:

npm包管理工具

这个包管理工具随着node的安装一起被安装到了用户的电脑上

在终端输入 npm -v 查看自己电脑上安装的npm包管理工具的版本号

项目中如何下载包:
npm install 包的完整名称
简写
npm  i 包的完整名称

初次安装包完成,项目文件下多了一个叫做node_modules文件夹 和package-lock.json和package.json

node_modules  存放所有已安装到项目中的包  require导入第三方模块包,就是从node_modules目录中查找并加载包
package-lock.json  配置文件用来记录node_modules目录下每一个包的下载信息,包的名字,版本号,下载地址,不需要手动修改文件, npm包管理工具会自动维护它
包管理配置文件:

npm规定,在项目目录中,必须提供一个叫做package.json的包管理配置文件,用来记录与项目有关的一些配置

  • 项目名称,版本号,描述
  • 项目中都用到了那些包
  • 那些包只在开发期间调用
  • 那些包在开发和部署时都需要用到
npm init -y 
//该命令只能在英文的目录下成功运行dependencies  专门用来记录你使用npm install 命令安装了那些包
一次性安装所有的包:
npm i
或者
npm installnpm uninstall  包文件名   删除包s
yarn:
全局安装yarn:
npm i yarn -g
使用:
yarn init yarn ad  包文件名yarn remove 包文件名yarn 
or
yarn install   根据package.json文件为项目安装所有依赖
安装指定版本的模块:
yarn add 包名@3.0.1
npm i 包名@3.0.1
如何记录项目中安装了那些包:
dependencies:

package.json中有一个dependencies 节点,专门用来记录你使用npm install 命令安装了那些包

devdependencies:

有些包只在项目开发阶段会使用,在项目上线之后不会用到,建议把这些包记录到devdependencies 中(less)

有些包在项目开发阶段和项目上线之后都会用到建议把这些包记录到dependencies

//记录到devdependencies节点中
npm i 包名 -D完整写法 
npm i 包名 --save-dev
包的分类:
npm包管理工具下载的包,分为两大类:
  • 项目包

    哪些被安装到项目的node_modules目录中的包,都是项目包

    • 开发依赖包(记录到devdependencies节点中的包,只在开发阶段会用到)
    • 核心依赖包记录到dependencies节点中的包,在开发阶段和项目上线之后都会用到)
  • 全局包

    指向npm i 命令提供了 -g 参数,安装的就是全局包

    全局包被安装在C:\Users\54004\AppData\Roaming\npm\node_modules只有工具性质的包,才有全局安装的必要性

模块化:

什么是模块化:

模块化是指解决一个复杂的问题时,自顶向下逐层把系统划分为若干模块的过程

编程领域的模块化:

(一个js文件就是一个模块)

遵守固定的原则,把一个大文件拆成独立的多个模块

  • 提高了代码的复用性
  • 提高了代码的可维护性
  • 可以实现按需加载
模块化的规范:

模块化的规范就是对代码进行模块化的拆分和组合时,需要遵守的规则

  • 如何引入模块
  • 在模块中使用什么样的语法向外暴露成员

NodeJS中的模块化规范:

Node.js遵循了CommonJS模块化规范,Commonjs规定了模块的特性和各模块之间如何相互依赖

CommonJS规定:
  • 每个模块内容,module变量代表当前模块
  • module变量是一个对象,它的exports属性(module.exports)是对外的接口
  • 加载某个模块,其实就是加载模块的module.exports属性,require方法用于加载模块

ES6模块:

前端模块化分类:

es6模块化诞生之前,js社区尝试提出了AMD,CMD,Commonjs模块化规范

AMD,CMD适用于浏览器端的JavaScript模块化规范

Commonjs适用于服务器端的JavaScript模块化

Es6既适用于浏览器端也适用于服务器端

ES6模块化规范定义:
  • 每个js文件都是一个独立的模块
  • 导入其它模块成员使用 import
  • 向外共享模块成员 适用 export
默认导出:

export default 默认导出的成员

注意:每个模块中,只允许使用唯一的一次export defaut ,否则会报错

var a = 10
function show() {}
const arr = [11, 22, 33]export default {a,show,
}
默认导入:

默认导入的时候接收名称可以是任意名称,只要是合法的成员名称就可以

// 导入export default 向外共享的成员
import aa from './01test.js'console.log(aa)  //{ a: 10, show: [Function: show] }
按需导入:
import aa, { s as ss, say, s1 } from './03test.js'console.log(ss, say, s1)
console.log(aa)
按需导出:
var a = 12
function show() {}
const arr = [11, 22, 333]// 按需导出
export let s = 'aaa'
export function say() {}
export let s1 = trueexport default {a,show,arr,
}
按需导入和按需导出的注意事项:
  • 每个模块中可以使用多次按需导出
  • 按需导入的成员必须和按需导出的名称保持一致
  • 按需导入时,可以使用as进行重命名
  • 按需导入可以和默认导入一起使用
直接导入并 执行模块中的代码:

如果只想单纯的指向某个模块中的代码,并不需要得到模块中向外共享的成员

for (let i = 0; i < 3; i++) {console.log(i)
}
import './06test.js'

test.js’

console.log(ss, say, s1)
console.log(aa)


#### 按需导出:

var a = 12
function show() {}
const arr = [11, 22, 333]

// 按需导出
export let s = ‘aaa’
export function say() {}
export let s1 = true

export default {
a,
show,
arr,
}


#### 按需导入和按需导出的注意事项:- 每个模块中可以使用多次按需导出
- 按需导入的成员必须和按需导出的名称保持一致
- 按需导入时,可以使用as进行重命名
- 按需导入可以和默认导入一起使用#### 直接导入并 执行模块中的代码:> 如果只想单纯的指向某个模块中的代码,并不需要得到模块中向外共享的成员

for (let i = 0; i < 3; i++) {
console.log(i)
}


import ‘./06test.js’


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

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

相关文章

php生成PDF文件(FPDF)

FPDF即“Free PDF”&#xff0c;FPDF类库提供了基本的PDF创建功能&#xff0c;其源代码和使用权是免费的。 PDF格式文档优势 通用&#xff1a;PDF文档在UNIX和Windows系统均可正常使用。 安全&#xff1a;PDF文档可设置为只读模式&#xff0c;并且可以添加密码等保护措施。 美…

JavaScript:闭包、防抖与节流

一&#xff0c;闭包 1&#xff0c;什么是闭包 闭包是指一个函数和其周围的词法环境(lexical environment)的组合。 换句话说&#xff0c;闭包允许一个函数访问并操作函数外部的变量。 闭包的核心特性: 函数内部可以访问外部函数的变量即使外部函数已经返回&#xff0c;内部…

ApacheShiro反序列化 550 721漏洞

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理个漏洞被称为 Shiro550 是因为在Apache Shiro的GitHub问题跟踪器中&#xff0c;该漏洞最初被标记为第550个问题,721漏洞名称也是由此而来 Shiro-550 CVE-2016-4437 Shiro反序列化Docker复现 …

Pytest参数详解 — 基于命令行模式!

1、--collect-only 查看在给定的配置下哪些测试用例会被执行 2、-k 使用表达式来指定希望运行的测试用例。如果测试名是唯一的或者多个测试名的前缀或者后缀相同&#xff0c;可以使用表达式来快速定位&#xff0c;例如&#xff1a; 命令行-k参数.png 3、-m 标记&#xff08;…

在wsl2下将Ubuntu从一个盘移动到其他盘

参考文章&#xff1a; wsl下将Ubuntu从c盘移动到其他盘 WSL数据迁移(迁移ext4.vhdx) WSL 系统迁移&#xff08;2&#xff09;&#xff0c;导入虚拟机磁盘映像 .vhdx ext4/fs WSL2迁移后默认登陆用户为root的解决方案 操作过程&#xff1a; 1.查看当前系统中wsl分发版本 …

系统托盘图标+快捷启动(Python)

QkStart 我把这个程序命名为QkStart 代码 # -*- coding: utf-8 -*- # Environment PyCharm # File_name QkStart |User Pfolg # 2024/10/19 22:06 import threading import time import pystray from PIL import Image from pystray import MenuItem, Menu import o…

【网络安全】缓存欺骗问题之查看个人资料接口

未经许可,不得转载。 文章目录 正文正文 目标网站 target.com,查看个人资料页面时,API 端点为/get_user,完整的 URL 是 https://target.com/web-api/v1/get_user?timestamp=123456(其中 timestamp 是一个易受攻击的参数)。 我注意到响应中有一个 cf-cache-status= MISS…

【ESP32-IDFV5.3.1开发】带SSL的MQTT-demo连接教程

目录 1.VSCODE以及IDF环境配置(略) 2.准备demo 2.1打开VSCODE&#xff0c;主菜单创建示例 找到SSL对应demo&#xff0c;点击创建&#xff0c;并成功创建项目&#xff0c;点击编译&#xff0c;显示编译成功即可以下一步。 确认该demo支持的开发板是你手上的开发板 3.修改demo配…

了解EasyNVR及EasyNVS,EasyNVR连接EasyNVS显示授权超时如何解决?什么原因?

我们先来了解NVR批量管理软件/平台EasyNVR&#xff0c;它深耕市场多年&#xff0c;为用户提供多种协议&#xff0c;兼容多种厂商设备&#xff0c;包括但不限于支持海康&#xff0c;大华&#xff0c;宇视&#xff0c;萤石&#xff0c;天地伟业&#xff0c;华为设备。 NVR录像机…

基于模型设计的智能平衡移动机器人-基础实验SPI

目录 SPI介绍 模型搭建 SPI介绍 SPI即Serial Peripheral Interface是高速同步串行输入/输出端口。SPI目前被广泛用于外部移位寄存器、D/A、A/D、串行EEPROM、LED显示驱动器等外部芯片的扩展。与前文介绍的SCI最大的区别是,SPI是同步串行接口。 SPI接口的通信原理简单&#…

(五)若使用LQR控制小车倒立摆,该如何对小车和摆杆的动力学方程线性化?哪些变量是可以进行简化的,线性化后的状态空间方程应该怎么列写

写在前面&#xff1a; 关于lqr控制的讲解&#xff0c;可以观看如下三个视频&#xff1a; 2. LQR数学公式理解_哔哩哔哩_bilibili 如何感性地理解LQR控制&#xff1f;_哔哩哔哩_bilibili LQR简介与使用_哔哩哔哩_bilibili 正文&#xff1a; 在之前系列的文章中我们已经得出…

WGCLOUD使用手册 - 文件防篡改监测

WGCLOUD作为一款运维平台&#xff0c;天然具备了文件防篡改监测能力&#xff0c;也可以监测文件夹 如果发现文件或者文件夹下的文件&#xff0c;被修改&#xff0c;被删除&#xff0c;被添加等操作&#xff0c;会立刻发送告警通知 如果设置了自动恢复指令&#xff0c;也会立刻…

极速体验:实用的前端性能优化技巧

本文将深入探讨一系列实用的前端性能优化方案&#xff0c;从基础知识到高级技巧&#xff0c;我们将揭示如何让你的网站在瞬息万变的互联网中脱颖而出&#xff0c;无论你是经验丰富的开发者还是刚入行的新手&#xff0c;这篇文章都将为你提供宝贵的见解和实践建议。 目录 &…

基于SSM+微信小程序的打印室预约管理系统(打印2)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的打印室预约管理系统实现了管理员和用户两个角色。 1、管理员功能有个人中心&#xff0c;用户管理&#xff0c;附近打印店管理&#xff0c;文件打印管理&#xff0c;当…

rk3568 android11 单独烧写内核。

问题: 我现在 遇到一个问题,如果我单独 烧写boot.img 的话,就会进入 recovery 的模式。 如下图: 问题说明: 如果我烧写的 Update.img 是可以启动的。那么我再烧写一个 编译 update.img 顺带编译出来的 boot.img 是可以正常启动的。 问题出在 , 如果我 重新编译一遍 ,使…

LVGL-从入门到熟练使用

LVGL简介 LVGL&#xff08; Light and Versatile Graphics Library &#xff09;是一个轻量、多功能的开源图形库。 1、丰富且强大的模块化图形组件&#xff1a;按钮 、图表 、列表、滑动条、图片等 2、高级的图形引擎&#xff1a;动画、抗锯齿、透明度、平滑滚动、图层混合等…

WebGL编程指南 - WebGL入门

初识绘图流程、缓冲区、着色器、attribute和uniform变量 先画一个蓝色的正方形 html代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content&…

stm32 为什么有2个晶振?8mhz+32.768k

1个是系统时钟晶振是单片机内部系统的主时钟源&#xff0c;它负责控制整个系统的时钟频率。这个晶振的频率一般比较高&#xff0c;通常在几十MHz到几百MHz不等。它和CPU以及各种总线之间相互配合&#xff0c;从而协同工作。 另外一个是外设时钟晶振则通常用于单片机的内部外设…

【大模型问答测试】大模型问答测试脚本实现(第二版)——接入pytest与代码解耦

背景 接上一篇&#xff0c;【大模型问答测试】大模型问答测试脚本实现&#xff08;第一版&#xff09;。 在实现自动化的时候&#xff0c;原先把很多方法与request请求写在一块了&#xff0c;趁着目前实现接口数量较少&#xff0c;决定对代码进行解耦&#xff0c;并且清晰目录…

大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…