Node.js是一个应用编程平台,能运行JS写的代码,基于Google的V8引擎,也就是js代码能通过Node.js直接查看。
node.js 的使用
右键点击要使用文件,然后点击在集成终端打开。
node.js常用指令
dir 查看当前文件夹下的所有文件
tree 以树状图结构展示当前目录下所有文件及子目录下所有文件
cd 文件夹 进入当前目录下的某一个目录
cd… 返回上一个目录
D: 切换盘符
cls 清空命令行窗口
ipconfig 查看当前电脑的id地址
ping www.baidu.com 查看百度网速
systeminfo 查看当前电脑信息
md test 创建一个名为test文件夹
rd test 移除当前文件夹下的名为test文件夹
xcopy test test1 复制一份test文件夹起名为test1
type nul>index,js 在当前目录下创建一个名为index.js文件
copy index.js 复制一份index.js文件
echo console.log(‘hello world’)>index.js 向index.js文件中写入文本console.log(‘hello world’)
type index.js 查看index.js中内容
ren index.js second.js 将index.js重命名为second.js
del index.js 删除index.js
move index.js a 移动index.js到a文件夹下
node index.js 运行index.js
ctrl+c 停止运行
web服务器
第一步: 引入node.js的http模块。
第二步: 创建web服务对象。 request请求对象,前端请求
第三步: 启动web服务器,监听端口,端口区分同一台电脑中不同web应用。 示例:
//调用内部模块require
var http=require('http')
//构造一个服务(接受两个参数request浏览器请求,response返回给浏览器的结果)
var server=http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/plain'})
response.write('hello world')
response.end()
})
//监听3000端口
server.listen(3000)
//用于成功启动时输出server started linsten 3000
console.log('server started linsten 3000');
//当在浏览器窗口输入http://localhost:3000
//页面出现hello world
注:当无法打开时
- 检查端口是否正确
- 查看服务器是否在本地,如果不在的话,需要将localhost替换为服务器ip
- 检查电脑防火墙是否对此类端口开放
fs方法
fs模块是和node.js一起下载安装的一个全局模块。
调用fs.readFile()方法来读取文件内容:
fs.readFile(path,[options],callback)
- 中括号里可选参数,表示以什么编码格式读取文件
- path表示文件路径
- callback表示回调函数拿到结果
代码示例:
//导入fs模块,来操作文件
const fs = require('fs')
//调用fs.readFile()方法读取文件
//参数一:读取文件的路径
//参数二:读取文件时候采用的编码格式,默认”utf8“
//参数三:回调函数返回成功还是失败的结果err和dtaStr
fs.readFile('../node01/test.txt','utf8',function(err,dtaStr){
//读取信息失败
if(err){
return console.log('读取信息失败>>>',err);
}
//读取信息成功
console.log('读取信息成功>>>',dtaStr)
})
})
//当前文件夹下有一个test.txt,里面有内容hello worle
//结果null
// hello worle
调用fs.writeFile()方法,写入文件的内容:
第一步: 创建一个js文件导入fs模块,来操作文件。
第二步: 调用fs.writeFile()方法,写入文件的内容
fs.writeFile(file,data[,options],callback)
- file文件路径,data内容,options编码格式,callback返回结果。
- fs.writeFile()不能重写路径,但可以重写文件,意思是在当前文件夹下如果没有该文件,就自己写文件,如果有就向文件写入内容。
- fs.writeFile()被多次写入内容不会报错,新的内容会覆盖旧的内容。
代码示例:
//引入fs文件系统模块
const fs=require('fs')
//调用fs.writeFile()方法,写入文件的内容
//参数一:文件的存放路径
//参数二:写入想要的文件内容
//参数三:回调函数
fs.writeFile('../node01/02test.txt','学学习',function(err){
if(err){
return console.log('创建失败>>>'+err.message);
}
console.log('写入成功>>>')
})
//写入成功02test.txt的内容为学学习
注释: 写入成功后,被写入文件的会有写入的内容,否则返回的是错误对象。
结合fs.readFile和fs.writeFile方法举例:
//导入模块
const fs = require('fs')
//调用fs.readFile()读取文件内容
fs.readFile('../练习/素材/成绩.txt', 'utf8', function (err, dataStr) {
if (err) {
console.log('读取失败>>>' + err.message);
}
// console.log('读取成功>>>'+dataStr);
//先分割数组
const arrOld = dataStr.split(' ')
//循环数组,然后对每一项的等号进行替换
const arrNew = []
arrOld.forEach(item => {
arrNew.push(item.replace('=', ':'))
})
//把数组的每一项进行合并,组成一个字符串
const nowStr = arrNew.join('\r\n')
//用fs.writeFile()方法,把处理完毕的成绩,写到新文件中
fs.writeFile('../练习/素材/成绩-01.txt', nowStr, function (err) {
if (err) {
console.log('创建失败>>>' + err.message);
}
console.log('创建成功>>>');
})
})
path路径模块
第一步: 先引入内部模块const path=require(‘path’).
第二步: 将多个路径片段拼接成一个完整的路径path.join()
const pathStr=path.join('/a','/b','…/',/c')
//结果\a\c
注: …/会抵消到上一个相邻位置
const pathStr=path.join(__dirname,'./test.txt')
//当前目录下的test.txt文件
获取路径中的文件名path.basename()
const route='/a/b/c/test.js'
let textName=path.basename(route)
console.log(textName)
//结果test.js
let name=path.basename(route,'.js')
console.log(name)
//结果test
获取文件扩展名
const route='/a/b/c/test.js'
let extName=path.extname(route)
console.log(extName)
//结果.js
结合fs.readFile和fs.writeFile方法加上patn.join拼接路径来举例:
示例:提取一个html文件,将css样式、js脚本和HTML标签分离出来,并将其改为外联式后重新存储
//导入fs模块
const fs = require('fs')
//导入path模块
const path = require('path')
//利用正则表达式,分别匹配<style></style>和<script></script>
const regStyle = /<style>[\s\S]*<\/style>/
const regScript = /<script>[\s\S]*<\/script>/
//调用fs.readFile()方法来读取文件
fs.readFile(path.join(__dirname, './modular/01index.html'), 'utf8', (err, dataSrt) => {
//读取失败
if (err) {
return console.log('读取html文件失败' + err.message);
}
//读取成功就调用三个方法来分割css样式,标签和Script脚本
resolveCss(dataSrt)
resolveJs(dataSrt)
resolveHtml(dataSrt)
})
//定义一个处理css文件的方法
function resolveCss(htmlStr) {
//使用正则提取需要的内容
const r1 = regStyle.exec(htmlStr)
//将提取出来的样式字符串,进行字符串的replace操作
const newCss = r1[0].replace('<style>', '').replace('</style>', '')
//使用fs.writeFile()方法,将提取出来的css样式写入modular文件夹下的index.css中
fs.writeFile(path.join(__dirname, './modular/index.css'), newCss, function (err) {
if (err) {
return console.log('写入css样式失败' + err.message);
}
console.log('写入css样式成功');
})
}
//定义一个处理js脚本的方法
function resolveJs(htmlStr) {
//使用正则提取需要的内容
const r2 = regScript.exec(htmlStr)
//将提取出来的样式字符串,进行字符串的replace操作
const newJs = r2[0].replace('<script>', '').replace('</script>', '')
//使用fs.writeFile()方法,将提取出来的js脚本写入modular文件夹下的index.js中
fs.writeFile(path.join(__dirname, './modular/index.js'), newJs, (err) => {
if (err) {
return console.log('写入javaScript脚本失败' + err.message);
}
console.log('写入avaScript脚本成功');
})
}
//定义一个处理html的方法
function resolveHtml(htmlStr) {
//使用字符串的replace方法将内嵌的style和script替换为link外联式
const newHtml = htmlStr.replace(regStyle, '<link rel="stylesheet" href="./index.css">').
replace(regScript, '<script src="./index.js"></script>')
//使用fs.writeFile()方法,将提取出来的html脚本写入modular文件夹下的index.html中
fs.writeFile(path.join(__dirname, './modular/index.html'), newHtml, (err) => {
if (err) {
return console.log('写入htmlm成功' + err.message);
}
console.log('写入html成功');
})
}
http网络模块 网络基础知识
1.ip地址
互联网中每一台WEB服务器都要自己的唯一ip地址。(通过ip地址访问服务器,用于测试的ip地址127.0.0.1)
2.域名和域名服务器
由于ip地址太长并且没有语义化,就出现了域名这种替代ip的访问方式类似于baidu.com,域名服务器就是将域名和ip两者进行互换。
3.端口号
一台服务器上有成千上百个服务,每个端口号对应一个服务。 注: 80端口号在js编辑时可以省略。
创建一个WEB服务器
(1).首先调用http内置内置模块require(‘http’)
(2).创建WEB服务http.createServer()
(3).监听服务server.listen()
代码示例:
//导入http模块
const http=require('http')
//创建基本的web服务器
const server=http.createServer()
//为服务器实例绑定request事件,监听客户端的请求
server.on('request',(req,res)=>{
console.log('服务器响应成功>>>')
})
//启动服务器
server.listen(8080,()=>{
console.log('server running at http://127.0.0.1:8080')
})
WEB服务器的两个对象
1.req请求对象包含与客户端相关的数据和属性.
(req.url客户端请求的地址)
(req.method客户端请求的方法类型)
2.res响应对象,向客户端传输内容.
(res.end像客户端响应内容)
代码示例:
const http = require('http')
const server = http.createServer()
//req是请求对象,包含了与客户端相关的数据和属性
server.on('request', (req,res) => {
//req.url是客户端请求的URL地址
const url = req.url
//req.method是客户端请求的method类型
const method = req.method
const str = `yous request url is ${url}.your request method is ${method}`
//使用res.end()方法,像客户端响应内容。
res.end(str)
console.log(str);
})
//启动服务器
server.listen(80, () => {
console.log('server request gt http://127.0.0.1');
})
解决中文乱码问题
调用res.setHeader()方法,设置Content-Type 响应头,解决中文乱码的问题。
res.setHeader(‘Content-Type’,‘text/html;charset=utf-8’)
代码示例:
const http=require('http')
const server =http.createServer()
server.on('request',(req,res)=>{
//定义一个字符串,包含中文的内容
const str=`您请求的 url 地址是 ${req.url}.请求的 method 类型是 ${req.method}`
//调用res.setHeader()方法,设置Content-Type 响应头,解决中文乱码的问题
res.setHeader('Content-Type','text/html;charset=utf-8')
//将内容返回给客户端
res.end(str)
})
//启动服务端
server.listen(80,()=>{
console.log('server request gt http://127.0.0.1');
})
- 根据不同的url地址响应不同的html内容
- 获取请求的url地址
- 设置默认响应内容为404 Not found
- 判断用户的请求
- 防止乱码
- 使用res.end()将内容给客户端
代码示例:
const http=require('http')
const server=http.createServer()
server.on('request',(req,res)=>{
//1.获取请求的地址url
const url=req.url
//2.设置默认响应的内容404 Not found
let content='<h1>404 Not found</h1>'
//3.判断用户请求是否为/或者/iindexx.htmml 主页
//4.判断用户请求是否为/about.html 关于页面
if(url==='/'||url==='/index.html'){
content='<h1>首页</h1>'
}else if(url==='/about.html'){
content='<h1>关于页面</h1>'
}
//调用res.setHeader()方法,设置Content-Type 响应头,解决中文乱码的问题
res.setHeader('Content-Type','text/html;charset=utf-8')
//将内容返回给客户端
res.end(content)
})
//启动服务端
server.listen(80,()=>{
console.log('server request gt http://127.0.0.1');
})
结合fs、path模块和WEB服务器来实现当客户端输入不同访问地址显示不同的页面
//导入fs模块
const fs = require('fs')
//导入path模块
const path = require('path')
//导入http模块
const http = require('http')
//创建web服务器
const server = http.createServer()
//监听wed的request事件
server.on('request', (req, red) => {
//获取到客户端请求的 URL 地址
// /modular/index.css
// /modular/index.js
// /modular/index.html
const url = req.url
//把请求的 ULR 地址映射为具体文件的存放路径
//优化路径操作
//定义一个空的fpath
let fpath=''
if(url==='/'){
fpath=path.join(__dirname,'/modular/index.html')
}else{
fpath=path.join(__dirname,'/modular',url)
}
// const fpath = path.join(__dirname, url)
//根据“映射”过来的文件路径,读取文件的内容
fs.readFile(fpath,'utf8',(err,dataStr)=>{
//读取失败返回固定的错误消息
if(err){
return red.end('<h1>404 Not found</h1>')
}
//读取文件成功返回读取的文件信息
red.end(dataStr)
})
})
//启动服务端事件
server.listen(80, () => {
console.log('server request gt http://127.0.0.1');
})
nvm管理node版本
nvm可以管理nodeJS的版本,在一台电脑需要适配多个项目的nodeJS运行环境时使用nvm来管理nodeJS的版本就会更方便高效。
安装前记得先卸载nodejs,然后安装nvm,傻瓜操作一路next即可,记得记住nvm的安装位置。(安装nvm前可以不卸载已安装的node,在nvm安装过程中系统会弹框提示是否把已安装的node作为可控,确定就行)
nvm -V 查看版本号
如果你希望下载资源的时候速度更快,可以使用国内的淘宝镜像 找到nvm安装的位置,打开settings.txt文件,在里面换行添加下面的路径保存退出即可。
- node_mirror: npm.taobao.org/mirrors/nod…
- npm_mirror: npm.taobao.org/mirrors/npm…
nvm的指令使用
nvm off // 禁用node.js版本管理(不卸载任何东西)
nvm on // 启用node.js版本管理
nvm install <version> // 安装node.js的命名 version是版本号 例如:nvm install 8.12.0
nvm uninstall <version> // 卸载node.js是的命令,卸载指定版本的nodejs,当安装失败时卸载使用
nvm ls // 显示所有安装的node.js版本
nvm list available // 显示可以安装的所有node.js的版本
nvm use <version> // 切换到使用指定的nodejs版本
nvm v // 显示nvm版本
nvm install stable // 安装最新稳定版
使用npm包管理工具的常用指令
npm安装指令
npm install xxx 利用 npm 安装xxx模块到当前命令行所在目录
npm install xxx 安装但不写入package.json
npm install -g xxx 利用npm安装全局模块xxx
npm install xxx –save 安装并写入package.json的”dependencies”中
npm install xxx –save-dev 安装并写入package.json的”devDependencies”中
npm删除指令
npm uninstall xxx 删除xxx模块;
npm uninstall -g xxx 删除全局模块xxx;
npm打包指令
npm run build 打包项目文件
试用nvm管理nodejs版本的时候可能会出现的问题
在使用nvm时切换了nodejs的版本会如果不兼容开发项目时使用的nodejs版本就会报下面的错误,启动不了服务器,只需要切换到对应的nodejs版本就行。
FailureMessage Object: 00000013C8EFD490npm ERR! code ELIFECYCLE
npm ERR! errno 3221225477
npm ERR! official-web@0.1.0 serve: `vue-cli-service serve`
npm ERR! Exit status 3221225477
npm ERR!
npm ERR! Failed at the official-web@0.1.0 serve script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\86189\AppData\Roaming\npm-cache\_logs\2022-10-08T02_23_25_004Z-debug.log
D:\official website\official-web>