Node.js
1、什么是Node.js?
Node.js是一个跨平台JavaScript运行环境,使开发者可以搭建服务器端的JavaScript应用程序,主要是用Node.js编写服务器端程序,编写数据接口,提供网页资源浏览功能等,它是前端工程化的基础。
2、前端工程化
前端工程化是指项目开发直到上线过程中集成的所有工具和技术,相应的工具和技术有:格式化工具、压缩工具、打包工具、转换工具、手脚架工具等,Node.js是前端工程化的基础,因为Node.js可以主动读取前端代码内容。
3、Node.js为何能执行JS?
- 浏览器能执行JS代码,依靠的是内核中的V8引擎(C++程序)
- Node.js是基于Chrome V8引擎进行封装(运行环境)
- 浏览器和Node.js都支持ECMAScript标准语法,Node.js有独立的API
- 注意:Node.js环境没有DOM和BOM等
- 浏览器:document、window、XMLHttpRequest
- ECMAScript:String、Number、setTimeout、console、Promise
- Node.js:fs、path、http
4、Node.js安装
1、首先我们先进入node.js个版本下载连接,选择下载自己需要的版本。
2、下载完成后运行安装包,除了安装路径需要你选择你自己想要安装的位置以外,其他都直接点击next。
3、安装完成后按wim + R
输入cmd
进入命令行界面,输入node -v
可以查看当前安装的node的版本,输入npm -v
显示npm版本,如果都能显示则安装成功。
5、fs模块-读写文件
模块:类似插件,封装了方法/属性
fs模块:封装了与本机文件系统进行交互的,方法/属性
//加载fs模块对象
const fs = require('fs')
//写入文件内容
fs.writeFile('文件路径', '写入内容', err => {
//写入后的回调函数
})
//读取文件内容
fs.writeFile('文件路径', (err, data) => {
//读取后的回调函数
//data是文件内容的Buffer数据流
})
6、path模块-路径处理
在Node.js代码中,相对路径是根据终端所在路径来查找的,可能无法找到你想要的文件,因此在Node.js代码中,尽可能的使用绝对路径,Node.js中提供了一个内置变量__dirname
他会获取当前模块目录的绝对路径,其中path.join()
会使用特定于平台的分隔符,作为定界符,将所有给定的路径片段连接在一起。
const fs = require('fs')
const path = require('path')
fs.writeFile(path.join(__dirname, '../test.txt'), (err, data) => {
if (err) console.log(err);
else console.log(data.toString())
})
7、压缩前端html
我们在对项目进行封装打包时就会需要把有些文件进行初步压缩,这时候就需要把相关文件中我们为了方便阅读的格式进行压缩。
const fs = require('fs')
const path = require('path')
fs.readFile(path.join(__dirname, '相对路径'), (err, data) => {
if (err) console.log(err)
else{
const htmlStr = data.toString()
const resultStr = htmlStr.replace(/[\r\n]/g, '')
console.log(resultStr)
fs.writeFile(path.join(__dirname, '相对路径'), resultStr, err => {
if (err) console.log(err);
else console.log('写入成功')
})
}
})
8、URL中的端口号
URL:统一资源定位符,简称网址,用于访问服务器里面的资源
端口号:标记服务器里不同功能的服务程序
端口号范围:0-65535之间的任意整数
- 常见的服务程序
- 21端口:FTP 文件传输服务
- 22端口:SSH协议、SCP(文件传输)、端口号重定向
- 23/tcp端口:TELNET 终端仿真服务
- 25端口:SMTP 简单邮件传输服务
- 53端口:DNS 域名解析服务
- 69/udp:TFTP
- 80/8080/3128/8081/9098端口:HTTP协议代理服务器
- 110/tcp端口:POP3(E-mail)
- 119端口:Network
- 123端口:NTP(网络时间协议)
- 135、137、138、139端口: 局域网相关默认端口,应关闭
- 161端口:SNMP(简单网络管理协议)
- 389端口:LDAP(轻量级目录访问协议)、ILS(定位服务)
- 443/tcp 443/udp:HTTPS服务器
- 465端口:SMTP(简单邮件传输协议)
- 873端口:rsync
- 1080端口:SOCKS代理协议服务器常用端口号、QQ
- 1158端口:ORACLE EMCTL
- 1433/tcp/udp端口:MS SQLSERVER数据库server、MS SQLSERVER数据库monitor
- 1521端口:Oracle 数据库
- 2100端口:Oracle XDB FTP服务
- 3389端口:WIN2003远程登录
- 3306端口:MYSQL数据库端口
- 5432端口:postgresql数据库端口
- 5601端口:kibana
- 6379端口:Redis数据库端口
- 8080端口:TCP服务端默认端口、JBOSS、TOMCAT、Oracle XDB(XML 数据库)
- 8081端口:Symantec AV/Filter for MSE
- 8888端口:Nginx服务器的端口
- 9000端口:php-fpm
- 9080端口:Webshpere应用程序
- 9090端口:webshpere管理工具
- 9200端口:Elasticsearch服务器端口
- 10050端口:zabbix_server 10050
- 10051端口:zabbix_agent
- 11211端口:memcache(高速缓存系统)
- 27017端口:mongoDB数据库默认端口
- 22122端口:fastdfs服务器默认端口
9、http模块-创建Web服务
http模块用于创建Web服务并相应内容给浏览器,类似模拟后端处理前端发起的请求问题。
// 加载http模块,创建Web服务对象
const http = require('http')
const server = http.createServer()
// 监听request请求
server.on('request', (req, res) => {
// 设置响应头:内容类型,普通文本:编码格式utf-8
res.setHeader('Content-Type', 'text/plain;charset=utf-8')
res.end('欢迎使用Node.js')
})
//配置端口号3000
server.listen(3000, () => {
console.log('Web服务已启动');
})
10、模块化
CommonJS模块是为Node.js打包JavaScript代码的原始方式。Node.js还支持浏览器和其他JavaScript运行时使用的ECMAScript模块标准。在Node.js中,每个文件都被视为一个单独的模块。每个项目是由多个模块文件组成的,这样可以提高代码的复用性,按需加载,独立作用域,如果不同js文件之间有数据传递,需要标准语法导出和导入进行使用。
10.1、CommonJS标准
CommonJS标准简单来教就是对每个js文件模块之间的私有属性进行封装,可以提供给其他js文件进行使用,一般应用在Node.js项目环境中。
//导出
module.exports = {
属性名1: 值,
属性名2: 值
}
//导入
require('模块名或路径')
10.2、ECMAScript标准-默认导出和导入
CommonJS规范是Node.js环境中默认的,而ECMAScript 标准语法是后面官方推出的,但是ECMAScript标准是可以在浏览器和Node.js之间都可以使用的。但是Node.js默认支持CommonJS标准语法,因此我们如果需要使用ECMAScript标准语法,需要在运行模块所在文件夹新建package.json文件,并设置{"type" : "module"}
//导出
export default{
属性名1: 值,
属性名2: 值
}
//导入
import 变量名 from '模块名或路径'
10.3、ECMAScript标准-命名导出和导入
ECMAScript 标准的语法有很多,常用的就是默认和命名导出和导入,一般应用在前端工程化项目中。
//导出
export 修饰定义语句
//导入
import {同名变量} from '模块名或路径'
//例如
export const URL = ''
import { URL } from './test.js'
默认和命名两种方式使用情况都比较多,但是如果我们只是按需加载,就推荐使用命名导入导出,如果是全部加载,就推荐使用默认导入导出。
11、包
-
包:将模块,代码,其他资料聚合成一个文件夹
-
包的分类:
- 项目包:主要用于编写项目和业务逻辑
- 软件包:封装工具和方法进行使用
在根目录种,必须有package,json文件(记录包的清单信息),导入软件包时,引入的默认时index.js模块文件/main属性指定的模块文件。
{
"name": "cz_utils", //软件包名称
"version": "1.0.0", //软件包当前版本
"description": "描述信息", //软件包简短描述
"mian": "index.js", //软件包入口点
"author": "xia", //软件包作者
"license": "MIT" //软件包许可证(商用后可以用作者名字宣传)
}
12、npm-软件包管理
npm是Node.js标准的软件包管理器,是作为下载和管理Node.js包依赖的方式,但其现在也已经成为前端JavaScript种使用的工具。
使用方法:
- 初始化清单文件:npm init -y(得到package.json文件,有则略过此命令)
- 下载软件包:npm i 软件包名称
- 使用软件包
13、npm-安装所有依赖
通常情况下我们在拿到别人编写的项目时,里面是node_modules的,因此我们需要安装项目所有需要的依赖软件包,并运行 index.js 代码看是否正常!
14、npm-全局软件包nodemon
软件包的区别:
- 本地软件包:当前项目内使用,封装属性和方法,存在于node_modules
- 全局软件包:本机所有项目使用,封装命令和工具,存在于系统设置的位置
nodemon作用:替代node命令,检测代码更改,自动重启程序。
使用方法:
- 安装:npm i nodemon -g(-g代表安装到全局环境中)
- 运行:nodemon待执行的目录js文件
在执行目录文件中如果出现报错问题,那是因为系统禁止运行脚本,我们需要用管理员身份重新打开vscode,然后在终端中执行get-ExecutionPolicy
命令,显示Restricted
(表示状态是禁止的),我们只需要用set-ExecutionPolicy RemoteSigned