Node.js阶段学习(一)
使用readFile读取文件内容
//1导入fs文件,来操作文件
const fs = require('fs')
//2.调用fs.readFile()方法读取文件
//参数1:读取文件的存放路径:./files/demo1.txt
//参数2: 读取文件时候采用的编码格式,一般默认制定utf8
//参数3: 回调函数,拿到读取失败和成功的结果 err(失败结果) dataStr(成功结果)
fs.readFile('./files/demo1.txt','utf8',function (err,dataStr) {//2.1打印失败结果,// 如果读取成功,err的值为null// 如果读取失败,则err的值为错误对象,dataStr的值为undefinedif(err){return console.log('文件读取失败'+ err)}//2.2打印成功结果console.log('文件读取成功'+dataStr)
})
使用writeFile方法向指定的文件中插入内容
// 1.导入fs 系统模块
const fs = require('fs')
// 2.调用fs.writeFile() 方法,创建写入文件内容(只能用来创建文件不能用来创建路径)重复调用fs.writeFile()方法会覆盖之前的内容
// 参数1:表示文件的存放路径:./files/demo2.txt
// 参数2: 表示要写入的内容: kiku
// 参数3:回调函数
fs.writeFile('./files/demo2.txt', 'kiku',function (err) {//2.1 如果文件写入成功,err返回为null//2.2 如果文件写入失败,err的值会是一个错误对象// console.log(err)if(err){return console.log('文件写入失败',err)}console.log('文件写入成功')
})
路径问题处理
问题----
- 问题:在使用fs模块操作文件时,如果提供的文件路径是./或者…/的相对路径时,很容易出现路径动态拼接错误的问题
- 问题出现原因: 代码在运行的时候,会执行node命令所处的目录,动态拼接出被操作文件的完整路径
解决方案
- 可以直接提供一个完整的文件存放路径(移植性差,不方便维护)
const fs = require('fs')
fs.readFile('/Users/WebstormProjects/nodeTEST/files/demo1.txt','utf8',function (err,data) {if(err){return console.log(err)}console.log(data)
})
- __dirname 表示当前文件所处目录
const fs = require('fs')
const path = require("path")
// 拼接路径要用path.join,不要使用+,如果路径格式不对,会导致错误用+ '/files/demo1.txt' 和'./files/demo1.txt'不一样,path.join会直接过滤.字符
//path.join(__dirname,'files/demo1.txt')
//__dirname+'/files/demo1.txt'
fs.readFile(path.join(__dirname,'/files/demo1.txt'),'utf8',function (err,data) {if(err){return console.log(err)}console.log(data)
})
path.join()方法,path.basename()方法,path.extname()方法
path.join():拼接路径
const fs =require('fs')const path =require('path')//注意: ../会抵消前面的路径const pathStr = path.join('/a','b/c/d','../','e')console.log(pathStr) ///a/b/c/econst pathData = path.join('/a','b/c/d','../../','e')console.log(pathData) ///a/b/efs.readFile(path.join(__dirname,'/files/demo1.txt'),'utf8',function (err,data){if(err){return console.log(err)}console.log(data)})
path.basename():获取文件名称
//path.basename()方法可以从一个文件路径中获取文件的名称部分//参数1:文件路径(必传)//参数2:文件扩展名(非必传,如果不需要文件扩展名可传)//path.basename('文件路径:','文件扩展名')const path= require('path')//定义文件的存放路径const fpath = '/Users/jiangdi/WebstormProjects/nodeTEST/files/demo2.txt'const fname = path.basename(fpath)console.log(fname) //demo2.txtconst fname1 = path.basename(fpath,'.txt')console.log(fname1)//demo2
path.extname():获取文件后缀名
//path.extname()// 参数:文件路径(必传)const path = require('path')const fpath ='/a/b/c/index.html' //文件存放路径:/a/b/c/index.htmlconst ext= path.extname(fpath)console.log(ext)//.html
创建web服务器
// 1.导入http模块const http =require('http')// 2.创建web服务器实例const server = http.createServer()// 3.为服务器实例绑定request事件,监听客户端的请求server.on('request',function (req,res) {console.log('Someone visit our web servers.')})// 4.启动服务器:8080配置端口server.listen(8080,function (){console.log('server running at http://127.0.0.1:8080')})
了解http中req请求对象和res响应
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.methodconst str = `You request url is ${url} and request method is ${method}`console.log(str)// 调用res.end() ,向客户端响应一些内容res.end(str)})server.listen(8081, function () {console.log('server running at http://127.0.0.1:8081')})
解决http中文乱码问题
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.methodconst str = `你请求的url是 ${url} 请求的方法是 ${method}`console.log(str)// 调用 res.setHeader()方法,设置Content-Type响应头,解决中文乱码的问题res.setHeader('Content-type','text/html;charset=utf-8')// 调用res.end() ,将响应返回给客户端res.end(str)})server.listen(80, function () {console.log('server running at http://127.0.0.1')})
根据不同的url响应不同的内容
//导入http模块const http = require('http')//创建服务器const server = http.createServer()// 监听web服务器的 request 事件server.on('request',(req,res)=>{// 1.获取请求的url地址const url =req.url// 2.设置默认响应的内容为 404 not foundlet content = '<h1>404 not found</h1>'// 3.判断请求是否为/或者/index.html首页// 4. 判断页面是否为about.html 关于页面if(url === '/' || url ==='/index.html'){content ='<h1>首页</h1>'}else if(url === '/about.html'){content ='<h1>关于页面</h1>'}// 5.设置Content-type响应头,防止中文乱码res.setHeader('Content-type','text/html;charset=utf-8')// 6.使用res.end() ,把内容返回给客户端res.end(content)})server.listen(8081,()=>{console.log('server is running http://127.0.0.1:8081' )})
node模块分为内置模块,自定义模块,和第三方模块
//加载内置模块
const fs = require('fs')
//加载用户自定义模块要写路径 ,注意在加载自定义模块时可以省略.js后缀名
const m1 = require('./01m')
//加载第三方模块
模块块级作用域
- 在自定义模块中,定义的变量,方法等成员,只能在当前模块中访问,这种模块级别等访问限制,叫做模块作用域
- 好处:防止了全局变量污染的问题
向外共享模块作用域的成员
module对象
- 在每个.js自定义模块中都有一个module对象,它里面存储了当前模块有关的信息
console.log(module)
module.exports 对象(exports对象)
- 在自定义模块中,可以使用 module.exports对象,将模块内的成员共享出去,供外界使用
- 在一个自定义模块中,默认情况下,module.exports = {}
- 在外界使用require方法导入一个自定义模块的时候,得到的就是引入的自定义模块中通过module.exports指向的那个对象
- module.exports和exports指向同一个对象,即最总共享的对象以module.exports指向的对象为准
新建两个js文件 demo1.js 和demo2.js
// demo1js
// 向module.exports 对象上挂载 username 属性
module.exports.username ='kiki'
// 向module.exports 对象上挂载 sayhello 方法
module.exports.sayhello = function (){console.log('大家好')
}
// demo2.js
const demo1= require('./demo1')
console.log(demo1) // { username: 'kiki', sayhello: [Function (anonymous)] }
- 使用require 方法导入模块时,导入的结果永远以 module.exports 指向的对象为准
- 为了防止混乱,建议大家不要在同一个模块同时使用exports 和 module.exports
nodejs中的模块化规范(nodejs遵循了CommonJS规范)
- 每个模块内部module 变量代表当前模块
- module 变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口
- 加载某个模块,其实就是加载这个模块的module.exports属性,require()方法用于加载模块
npm包
- 命令: npm i 名称,例如npm i moment ,(npm i 和npm install 一样)
- 使用: 1.导入的名称就是安装包的名称(require(‘moment’)):
npm 初次安装包多了哪些文件呢
- node_modules 文件夹用来存放所有已经安装到项目中的包,require()导入第三方包时,就是从这个目录中查找并加载包
- package-lock.json 配置文件用来记录node_modules目录下每一个下载包的下载信息,例如包的名字,版本号和下载地址等
- package.json(必须存在)
npm包管理配置文件(package.json)
- package.json 用来记录与项目有关的配置信息
快速创建 package.json
- 命令: npm init -y
- 注意:此命令只能在英文的目录下成功运行,所以项目文件夹名称不能是中文,不能用空格
如何安装指定版本的包呢?
- 如果需要安装指定版本的包,可以在包名字之后通过 @符号 指定具体的版本,例如 npm i moment@2.29.4
- 包的语义化版本 例如2.29.4 第一位数字:大版本,第二位数字:功能版本,第三位数字:bug修复版本
- 版本号提升的规则:只要前面的版本号增长了,后面的版本号归零
npm一次性安装所有的包
- npm install (npm i)
npm 卸载包
- 使用npm uninstall 具体的包名 来卸载包
- npm uninstall moment (moment是卸载的包名 )
安装全局包
- npm i 包名 -g
卸载全局包
- npm uninstall 包名 -g
解决下载包慢的问题
- 淘宝npm镜像
- 查看当前下载包的镜像源 : npm config get registry
- 将下包的镜像设置为淘宝镜像: npm config set registry https://registry.npm.taobao.org
规范的包结构
- 必须以单独的文件存在
- 包的顶级目录下面必须包含package.json 配置文件
- package.json 文件必须包括 name ,version, main 三个属性 分别代表包的名字。版本号,包的入口
发布npm包
- npm publish (注意:此命名在发布包的目录下)
删除已发布的包
- 命令:npm unpublish 包名 --force 即可删除npm发布的包
- 注意:
npm unpublish命令只能删除72小时以内发布的包
npm unpublish 删除的包在24小时内不能重复发布
尽量不要往npm发布无用包
nrm 工具
- 安装nrm 工具: npm i nrm -g
- 查看所有可用的镜像源: nrm ls
- 切换镜像 例如切换为淘宝镜像:nrm use taobao
Node.js阶段学习(一)相关推荐
- Node.js+mongodb 学习笔记(三)swagger注释+用户管理
Node.js+mongodb 学习笔记(三)swagger注释+用户管理 Node.js+mongodb 学习笔记(三)swagger注释+用户管理 用户注册 用户登录 修改密码 swagger注释 ...
- 【特别推荐】Node.js 中文学习资料和教程导航
这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...
- 微信小程序Node.js+uniapp学习计划与日程管理系统app
本学习计划与日程管理系统,主要用来为用户提供自主计划学习的主要功能,主要实现首页.计划学习页.日程安排页.个人中心页这四大页面,相对应的功能如下分析: (1) 首页:该页面主要由搜索.论坛发表. ...
- node.js基础学习
node.js简介 Node.js能够让javascript在服务端运行 1.node的特性 异步I/O 说到异步I/O,就不得不说一下I/O,他们分别是input和output的缩写,也就是输入.输 ...
- Node.js 寒假学习日志之Node.js
学习计划 ES6 Node.js VUE.JS Uni-App 学习日志之Node.js 2021/1/22 P3 http模块(http/s) //引入http(s)模块 PS:http与https ...
- Node.js 初步学习总结
Node.js是一个基于Goolgle所开发的Chrome浏览器引擎的JavaScript运行环境,简单的说,它就是运行在服务端的JavaScript,使用了很多先进的技术,其中包括事件驱动,非阻塞式 ...
- Node.js基础学习(第二幕)
Node.js的模块系统 Node.js中使用"Module(模块)"来规划不同的功能对象. 模块的分类: (1)核心模块--nodejs的内置模块 (2)第三方模 ...
- Node.js的学习--使用cheerio抓取网页数据
打算要写一个公开课网站,缺少数据,就决定去网易公开课去抓取一些数据. 前一阵子看过一段时间的Node.js,而且Node.js也比较适合做这个事情,就打算用Node.js去抓取数据. 关键是抓取到网页 ...
- 【前端】-【node.js基础】-学习笔记
[前端]-[node.js]-学习笔记 1 node.js介绍 1.1 node.js优点 1.2 node.js 不足之处 1.3 nodejs与java的区别 2. node中函数 3. 浏览器和 ...
最新文章
- 【HDOJ】3275 Light
- TCP服务端程序开发
- Leetcode 刷题笔记
- 四大价值观和12准则
- Spring3国际化和本地化
- react学习路线图,学习react就是有捷径
- iOS回顾笔记( 01 )-- XIB和纯代码创建应用的对比
- 【产品】产品经理PM相关书籍荐读
- selenium 接管浏览器
- icode青少年编程比赛网站学生刷题进度爬虫
- GRBL分析:gcode解释器(一)
- 用opencv将左右眼3D图片转换为红蓝3D图片
- FPGA中LUT初步学习
- 并发与性能调优(后续补充)
- NRZ、RZ信号的时频域区别及它们的谱效率
- Could not find metadata org.apache.maven.plugins:maven-archetype-plugin/maven-metadata.xml in local
- 常见的网络状态检测及分析工具
- (C语言)简单的文件加密和解密程序
- SessionStorage如何存放对象
- webrtc-dtls、sctp、srtp