Node.js 简记

Node.js笔记

一、fs文件系统模块
1.导入
const fs = require('fs')
2.读取指定文件中的内容

fs.readFile(path,[options],callback)

  • 参数1:path必选参数,表示文件路径
  • 参数2:可选参数,表示以什么编码格式来读文件
  • 参数3:必选参数,文件读取完成以后,通过回调函数拿到读取失败和成功的结果 err dataStr
const fs = require('fs')
fs.readFile('./files/11.txt','utf8',function(err,dataStr){
    //如果读取成功,则err的值为null
    //如果失败,err为错误对象,dataStr为undefined
})

err.message:返回错误信息

3.向指定文件写入文件内容

fs.writeFile(path,[options],callback)

  • 参数1:path必选参数,表示文件路径
  • 参数2:写入的内容
  • 参数3:可选参数,表示以什么编码格式来读文件,默认是utf8,可不写
  • 参数4:必选参数,文件读取完成以后,通过回调函数拿到读取失败和成功的结果 err dataStr
const fs = require('fs')
fs.readFile('./files/2.txt','abcd',function(err){
	//如果文件写入成功 err的值为null
    //如果写入失败 err的值为错误对象
    if(err){
        return console.log('文件写入失败'+err.message)
    }
    console.log('文件写入成功')
})

__dirname 表示当前js文件所处的目录位置

writeFile方法只能创建文件不能创建目录

  • 创建文件夹:mkdirSync(‘dirname’,callback())

重复调用fs.writeFile()会覆盖前内容

  • appendFile() 追加
二、path路径模块
1.导入
const path = require('path')
2.路径拼接

path.join([…paths]) 把多个路径片段拼接为完整的路径字符串

  • 参数:可以传递任意多个路径片段
const path = require('path')
//注意 ../会抵消前面一个路径 不加/则会自动添加
const pathStr = path.join('/a','/b/c','../','./d','e')
console.log(pathStr) // \a\b\d\e

路径拼接尽量都使用path.join

3.获取路径中的文件名

path.basename(path[, ext]) 把多个路径片段拼接为完整的路径字符串

  • 参数path必选:表示一个路径的字符串
  • 参数ext可选:表示文件扩展名
  • 返回:表示路径中的最后一部分
const path = require('path')
//注意 ../会抵消前面一个路径 不加/则会自动添加
const fpath = '/a/b/c/index.html'
const fullName = path.basename(fpath)
console.log(fullName) //打印全部文件名,包括后缀名.html

const nameWithoutExt = path.basename(fpath,'.html') //移除扩展名部分
console.log(nameWithoutExt)
4.路径拼接

path.extname(path) 可以获得路径中的扩展名部分

  • 参数:传递路径
const path = require('path')
//注意 ../会抵消前面一个路径 不加/则会自动添加
const fpath = '/a/b/c/index.html'
const fext = path.extname(fpath)
console.log(fext) // 输出.html

路径拼接尽量都使用path.join

三、http模块
1.导入
const http = require('http')
2.创建一个基本的web服务器
const http = require('http')
const server = http.createServer()
//为服务器实例绑定request事件
server.on('request',function(req,res){
    console.log('Someone visit our web server.')
})

//启动服务器
server.listen(8080,function(){
    console.log('server running at http://localhost:8080')
})
3.req请求对象

req是请求对象,包含了与客户端相关的数据和属性

req.url是客户端请求的url地址,从端口号开始的地址

req.method是请求的method类型

5.res响应对象

res是响应对象

res.send(arg)向客户端发送指定内容,并结束此次请求

6.解决中文乱码问题

添加header:Content-Type,text/html;charset=utf-8

const str = `您请求的url地址为${req.url},请求的method为${req.method}`
res.setHeader('Content-Type','text/html;charset=utf-8');
res.send(str)
四、模块化
1.加载模块

使用强大的require()方法可以加载所需要的内置模块,用户自定义模块,第三方模块进行使用

//加载内置模块
const http = require('http')
//加载自定义模块
const custom = require('./custom.js')
//加载第三方模块
const moment = require('moment')

当使用require加载其他模块时会运行被加载的模块

在使用require加载用户自定义模块期间可以省略.js后缀

2.模块作用域

每个模块的变量互不干涉

每一个模块都有一个module对象

  • 向外共享模块作用域中的成员

    在自定义模块时,可以通过module.exports对象将模块内的成员共享出去,供外界使用

    外界使用require()方法导入自定义模块时,得到的就是module.exports所指向的对象

    自定义模块.js

    //在一个自定义模块中,默认情况下,module.exports = {}
    
    //向module.exports对象上挂载username属性
    module.exports.username = 'zs'
    
    //向module.exports对象上挂在username属性
    module.exports.sayHello = () => {
        console.log('Hello')
    }
    

    test.js

    //在外界使用require导入一个自定义模块的时候,
    //得到的成员就是那个模块通过module.exports指向的那个对象
    const m = require('./自定义模块')
    
    console.log(m) //{username:'zs',sayHello:[function]}
    

    使用require方法导入模块时,导入的结果,永远以module.exports指向的对象为准,即exports指向什么对象就导出什么对象

  • exports对象

    exports和module.exports指向的是同一个对象 简化了向外共享成员对象的代码

  • 注意

    require()模块时,得到的永远都是module.exports指向的对象

    exports.username = 'zs'
    module.exports = {
        gender:'男',
        age:20
    }
    // require {gender:'男',age:22}
    
    module.exports.username = 'zs'
    exports = {
        gender:'男'
        age:20
    }
    //最终require得到的对象是{username:'zs'} 因为永远都是module.exports指向的对象
    
    exports.username = 'zs'
    module.exports.gender = '男'
    // require: {username:'zs',gender: '男'}
    

    如果两个指向同一个对象时,可以同时修改对象的值

    如果两个指向的对象不为同一个时,以module.exports指向的对象为准

    exports只是存储module.exports的一个引用变量,改exports改不了module.exports

    exports = {
        gender:'男',
        age:20
    }
    module.exports = exports
    module.exports.username = 'zs'
    //require得到的对象时{gender:'男',age:20,username:'zs'} 与以上推论相符
    
3.模块化规范
  • CommonJS 规范:

    ① 每个模块内部,module变量代表当前模块

    ② module变量是一个对象,他的exports属性是对外的接口

    ③ 加载某个模块,其实是加载该模块的module.exports属性。require()方法用于加载模块

4.npm与包
  • Node.js中的第三方模块又叫包,由第三方个人或团队开发的

    包是基于内置模块封装出来的

  • npm初体验

    npm install 安装具体的包

    可简写 npm i 完整的包名

    npm i moment
    

    导入需要的包

    const moment = require('moment')
    
    const dt = moment().format('YYYY-MM-DD HH:mm:ss')
    console.log(dt)
    
  • install后多地文件夹和文件

    node_modules文件夹 用来存放已安装到项目中的包。require会从这个目录中查找并加载包

    package-lock.json 配置文件 用来记录node_modules目录下的每一个包的下载信息 :名字、版本号、下载地址等

  • 安装指定的版本的包

    npm i moment@ 版本号

    npm i moment@2.22.2
    

    第一位数字:大版本

    第二位数字:功能版本

    第三位数字:Bug修复版本

    版本号提升规则:只要前面的版本号增长了,则后面版本号归零

五、包管理配置文件

package.json记录项目中安装了哪些包

1.快速创建package.json
//在执行命令所处的目录中,快速创建package.json文件
npm init -y
//项目名称不能有中文和空格
2.dependencies节点

专门用来记录npm install安装了哪些包

npm install moment jquery art-template
"dependencies": {
    "art-template":"^4.13.2",
    "jquery":"^3.4.1",
    "moment":"^2.24.0"
}
3.一次性安装所有的包

当我们拿到剔除了node_modules的项目时需要导入所需要的包

//执行 npm install 命令时会读取package.js下dependencies下的所有包
//npm包管理工具会一次性全部安装所有包
npm install
4.卸载包

使用npm uninstall 具体的包名

成功后会把卸载的包自动从package.json的dependencies中移除掉

npm uninstall moment
5.devDependencies节点

如果某些包只在项目开发阶段会用到,在项目上线后不会用到,则建议把它放在啊devDependencies中

安装指定的包,并记录到devDependencies节点中

npm i 包名 -D

等价于:

npm install 包名 --save-dev

例如:

npm i webpack -D
"devDependencies": {
    "webpack":"^3.4.1"
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值