一、nodejs介绍
Node.js 是一个开源、跨平台的 JavaScript 运行时环境,它允许开发者在服务器端运行 JavaScript 代码。Node.js 基于 Chrome V8 引擎构建,它使得 JavaScript 可以脱离浏览器环境,执行在服务器上,从而可以用于构建各种类型的网络应用程序。
nodejs的特点:
-
事件驱动和非阻塞I/O模型:这使得 Node.js 非常适合处理大量并发连接,而不会因为 I/O 操作而阻塞线程。
-
NPM(Node Package Manager):这是世界上最大的软件注册表,提供了大量的第三方库和工具,使得开发者可以快速构建应用程序。
-
跨平台:Node.js 可以在多种操作系统上运行,包括 Windows、Linux 和 macOS。
-
异步编程:Node.js 鼓励使用异步编程模式,这样可以提高应用程序的性能和响应能力。
-
单线程与多线程:虽然 Node.js 在主线程上运行 JavaScript 代码,但它使用 libuv 库来处理多线程操作,比如文件系统操作和网络请求。
nodejs官方下载地址:Node.js 中文网
npm包管理器:
安装nodejs后,会自动安装npm,然而npm比node更新得更频繁,所有可以通过npm -v查看当前版本。
npm i npm -g //更新到最新版本
npm i npm@latest -g //安装最新的官方测试版本的npm
npm i npm@next -g //要安装将来发布的版本
npm i npm@6 -g //@后跟版本号,若跟的是大版本,则更新到对应大版本最新的小版本
npm i npm@6.14.14 -g //更新到指定版本
二、nodejs使用
命名:
打开cmd终端
查看版本号node -v
cd+项目目录指令进入项目
三、nodejs模块
1.fs文件系统模块
nodejs官方提供用来操作文件的模块
const fs=require('fs')
读取文件内容fs.readFile():
用法: 读取
指定文件内容
语法:fs.readFile(path[, options], callback(err, dataStr))
fs.readFile('./01.txt','utf-8',(err,data)=>{
if(err) throw err
console.log(data);
})
写入文件内容 fs.writeFile() :
用法:向指定文件 写入
内容
语法:fs.writeFile(path, data[, options], callback(err, dataStr))
注意:只能用来创建文件,不支持创建路径;重复调用写入同一个文件,新内容覆盖旧内容。
const obj={
name:'zs',
age:66,
sex:'男'
}
//将对象转换位json字符串
const data=JSON.stringify(obj,null,2)
//写入文件
fs.writeFile('./03/02.txt',data,(err)=>{
if(err) throw err
console.log('写入成功');
})
删除文件 fs.unlink() :
用法: 删除
指定文件
语法:fs.unlink(path, callback)
fs.unlink('./02.txt',(err)=>{
if(err) throw err
console.log('删除成功');
})
创建目录 fs.mkdir():
用法: 创建
目录
语法:fs.mkdir(path[, options], callback)
fs.mkdir('./03',(err)=>{
if(err) throw err
console.log('创建成功');
})
文件重命名 fs.rename():
用法:文件重命名
语法:fs.rename(oldPath, newPath, callback)
fs.rename('./1.txt','./01.txt',(err)=>{
if(err) throw err
console.log('文件重命名成功');
})
2.path 路径模块
用法:Node.js
官方提供、用来
处理路径
的模块
const path=require('path')
路径拼接 path.join()
用法:路径片段拼接完整路径
语法:path.join([paths…])
const str1=path.join('/a','/b','../','/c')
console.log(str1); // \a\c
console.log(__dirname); //获取当前文件所在的完整目录
const str4=path.join(__dirname,'../','index.js')
console.log(str4); //D:\pro1\043-10.8-nodejs常用模块\index.js
获取文件名 path.basename()
用法:获取文件名
语法:path.basename(path[, ext])
const str3=path.basename('/a/b/c/d/e')
console.log(str3); // e 获取指定文件的文件名
获取所在路径 path.dirname()
用法:获取所在路径
语法:path.dirname(path)
const str2=path.dirname('/a/b/c/d/e')
console.log(str2); // /a/b/c/d 取的是指定文件所在的目录,最后一个被识别成文件
3.http 模块
用法:Node.js
官方提供、用来
创建
web
服务器
的模块
const http = require('http')
web 服务:
后端:服务器安装了
web
服务器软件
,使之异于普通电脑。如
IIS
、
Apache
、
nginx
等第三方
web服务器软件。
前端:基于
Node.js
提供的
http
模块,
通过代码手写服务器软件
,从而对外提供
web
服务。
创建基本 web 服务:
//1.导入http模块
const http = require('http')
const fs = require('fs')
const path = require('path')
//2.创建web服务器实例
const server = http.createServer()
//3.监听request事件
server.on('request', (req, res) => {
console.log('请求的对象', req.url, req.method); //把请求对象转化为字符串,写入到一个文件中
//3.1获取请求地址
const url = req.url
//3.2根据请求地址指向不同的操作
let content = ''
if (url === '/' || url === '/index.html') { //首页
content = 'index.html'
} else if (url === '/list') { //列表页
content = 'list.html'
} else if (url === '/info') { //个人中心页面
content = 'info.html'
} else { //404页面
content = '404.html'
}
fs.readFile(path.join(__dirname, content), 'utf8', (err, data) => {
if (err) {
res.end('404错误')
return
}
//3.3设置响应头部,指定内容类型和字符编码,为了解决浏览器渲染中文乱码的问题
res.setHeader('Content-Type', 'text/html; charset=utf-8')
//3.4向前端返回指定数据,接收请求
res.end(data)
})
// console.log('响应的对象', res); //把响应对象转化为字符串,写入到一个文件中
})
//4.启动web服务
server.listen(3000, () => {
console.log('服务启动');
})
4.Node模块化
概念:遵守固定规则,将大文件拆成独立且相互依赖的多个小模块。
优点:
1.提高代码复用性
2.提升代码可维护性
3.实现按需加载
module.exports 对象
用于自定义模块中对外共享模块内成员,外界用 require()
导入自定义模块时,
得到的就是
module.exports
指定对象。
//module-a.js
let title='你好,世界'
let age=22
exports='hello'
//向外暴露指定的模块变量
module.exports={
title,
age
}
//module.js
const obj=require('./module-a')
console.log(obj);