hello-node
console.log('hello node.js!')
globle
1、在node中全局对象不是window
console.log(window)
2、在node.js全局对象global
console.log(global)
在node.js中,声明的函数和变量不会自动添加到全局对象golabl上
var b = 2
console.log('b:',b)
console.log(global)
console.log("global.b:",global.b)
全局函数
1、 setTimeout
setTimeout(() => {
console.log(1)
}, 1000)
2、setInerval
3、清除定时器
const timer = setInterval(()=>{
console.log(1)
},1000)
clearInterval(timer)
4、setImmediate 立即执行. 了解:是在事件队列开始之前执行
setImmediate(() => {
console.log(1)
})
5、process.nextTick() 立即执行的. 了解:在主进程结束后立即执行
process.nextTick(() => {
console.log(2)
})
console用法
1、基本用法
const a = "10"
console.log("a:", a)
console.log("a=%d", a)
2、格式化输出
myName: 'zs',
age: 19,
a: "今天学习node.js",
b: '明天也学习nodejs',
c: {
d: "后天也学习node.js",
e: '应该学的不错了',
f: {
m: '不知道鞋舌么了'
}
}
}
// console.log(obj)
console.table(obj)
3、计时函数 console.time()
console.time("for")
let sum = 0
for (let i = 0; i < 1000000; i++) {
sum += i
}
console.timeEnd("for")//for:14.15ms
process
console.log(process)
1、输出node的版本
console.log(process.version)
2、输出系统架构
console.log(process.arch)
3、输出操作系统平台
console.log(process.platform)
4、输出当前的工作目录 (cwd = current workding directory)
console.log(process.cwd());
5、环境变量
console.log(process.env);
6、自定义环境变量
process.env.NODE_ENV = "development"
console.log(process.env);
7、获取进程编号
console.log(process.pid)
path
先引入path模块
const path = require('path')
1、 获取当前文件所在的路径
console.log(__dirname)
2、 获取文件的完整路径
console.log(__filename)
3、 获取文件的扩展名
const extension = path.extname(__filename)
console.log(extension)
4、 获取文件路径中的目录的部分
console.log(path.dirname(__filename));
5、 获取文件路径中的文件名称(名称 + 扩展名)
console.log(path.basename(__filename))
6、 路径拼接, 注意: 没有真正生成路径
console.log(path.join("D:/", "a", "b", "c", "d", "xxx.png"));
console.log(path.join(__dirname, ".."));
fs
文件的写操作writeFile
const fs = require('fs')
fs.writeFile(文件路径,写入内容,回调函数) 文件存在,那么会写入数据;如果文件不存在,那么会自动创建文件 是会覆盖原有的内容!!!
fs.writeFile("./1.txt","我们正在学习vue.js",(err) => {
// 判断是否出错
if(err){
throw err
}
console.log('写入成功')
})
const fs = require('fs')
读取文件readFile
fs.readFile(文件路径,回调函数)
需求:文件路径改为用path拼接
fs.readFile(__dirname + '/1.txt',(err,data) => {
if(err){
throw err
}
// 注意:
console.log(data.toString());
})
删除文件unlink
const fs = require("fs")
fs.unlink(文件路径,回到函数) 删除文件不存在,会报错。以后在删除文件,先判断文件存不存在!!!
fs.unlink("./1.txt",err => {
if(err) {
throw err
}
console.log("删除成功")
})
创建文件appendFile
const fs = require('fs')
语法:fs.appendFile(文件路径,写入的内容,回调函数) 文件不存在,创建文件;文件存在,网文件中添加数据,不会覆盖原有的内容
fs.appendFile("./1.txt","react.js前端中的另一个库",err => {
if(err){
throw err
}
console.log('追加成功')
})
需求:把1.txt文件进行复制到一个新的文件1.copy.txt中。
1.txt原先不存在,1.copy.txt原先也不存在。
// 1、读取1.txt中的内容
// 2、往1.copy.txt中写入读取到的内容
dir
_mkdir创建目录
const fs = require('fs')
// 语法:fs.mkdir(目录路径,回调函数)
fs.mkdir("./d1", err=>{
if(err){
throw err
}
console.log("创建成功")
})
_readdir读取目录
const fs = require('fs')
// fs.readdir(目录路径,回调函数)
fs.readdir(__dirname,(err,data) => {
if(err){
throw err
}
// console.log(data)
data.forEach(item => {
console.log(item)
// 获取目录或者文件的详细信息
fs.stat(__dirname + "/" + item,(err,stat) =>{
if(err){
throw err
}
// console.log(stat)
if(stat.isDirectory()){// 是否是目录
console.log('目录:',item)
}else if (stat.isFile()){//是否是文件
console.log('文件:',item)
}
})
})
})
rename重命名
// fs.rename()
const fs = require('fs')
需求:把d1的名称改为dtest
fs.rename(旧的文件目录,新的文件目录,回调函数)
fs.rename(__dirname + "/d1",__dirname+"/d2",err => {
if(err){
throw err
}
console.log("重命名成功")
})
rmdir删除空目录
const fs = require('fs')
fs.rmdir(目录路径,回调函数)
// 注意:rmdir只能删除空目录
fs.rmdir('./d1',err=>{
if(err){
throw err
}
console.log('删除成功')
})
需求:
根据用户输入的路径和和文件名称,来创建目录和文件。并且复制目录和文件。
const pathFile = "D://a/b/a.png"
// e://a/b/a.copy.png
stream
文件流的读写方式
const fs = require('fs')
自己创建file2.txt
1、创建读取流
const readStream = fs.createReadStream("./file2.txt")
2、创建写入流
const writeStream = fs.createWriteStream("./file_stream.txt")
3、搭建管道把读取流的数据传给写入流
readStream.pipe(writeStream)
文件压缩
需求:把style.css文件进行压缩,压缩之后,生成新的文件到./dist目录下
const fs = require('fs')
const path = require('path')
const dist = path.join(__dirname,'dist')
fs.readFile('./src/style.css',(err,data)=>{
if(err){
throw err
}else{
// console.log(data.toString())
// 对style.css文件中的内容进行压缩
const myDataNoSpace = data.toString().replace(/\s+/g,'')
// console.log(myDataNoSpace)
const myDataNoComment = myDataNoSpace.replace(/\/\*{1,2}[\s\S]*\*\//g,'')
console.log(myDataNoComment)
// todo 创建dist目录
fs.mkdir(dist,err=>{
if(err){
throw err
}
fs.writeFile(dist+'/style.min.css',myDataNoComment,err=>{
if(err){
throw err
}
console.log('压缩成功')
})
})
``
}
})
http模块
http模块
req=>request请求
res=>response 响应
/**
* 创建服务器
* express/koa2
* egg.js ectron
*
* http模块!!!
* req => request 请求
* res => response 响应
*/
const http = require('http')
// createServer(请求,响应)
const server = http.createServer((req,res)=>{
// res.statusCode = 4000001 // 例如:请求错误 400002 业务请求失败 400003 授权失败
res.setHeader('Content-type',"text/plain;charset=utf-8")
res.end("你好,我是 node.js")
})
const host = 'localhost'
const port = 3000
server.listen(port,host,()=>{
console.log(`server running at http://${host}:${port}`)
})
同步方法
node.js的同步方法 一般在方法后面都有一个sync
需求:删除一个文件
const fs = require('fs')
// 异步
fs.unlink("./file2.txt",(err)=>{})
// 同步以及捕获错误的方式
try{
fs.unlinkSync("./file2.txt")
fs.unlinkSync("./file2.txt")
}catch (err){
console.log(err)
}
// 删除文件之前,可以先判断一下
const isExist = fs.existsSync("./file2.txt")
if(isExist){
fs.existsSync("./file2.txt")
console.log('文件存在')
}else{
console.log('文件不存在')
}
自定义模块
入口文件
/**
* 入口
*/
// 1、引入文件模块
const circle = require('./circle.js')
console.log(circle)
console.log(circle.perimeter(3))
console.log(circle.area(5))
// 2、引入目录模块
// 2.1、目录模块下面如果有index.js,那么自动引入index.js;
const dir01 = require("./dir01/index.js")
const dir01 = require("./dir01")
// 2.2、引入自定义模块的时候,不能省略路径
const dir01 = require("dir01") //Cannot find module 'dir01'
dir01.info()
// 2.3、目录模块下面如果没有index.js,那么可以通过在目录下配置package.json中来指定入口模块
const a = require('./dir02/a.js')
const a = require('./dir02')
a.info()
// 2.4、引入自定义模块的时候,省略路径,直接写模块名称,那么可以在项目的根目录下新建node_modules,把模块放到node_modules中
const dir03 = require('dir03')
dir03.info()
// npm寻找模块的方式。
__dirname, __filename,
module
console.log(module)
circle.js模块
/**
* circle模块
* 模块:封闭的,内部的变量或者函数外部是无法直接访问的
*/
const PI = 3.14
/**
* 计算圆的周长
*/
function perimeter(r){
return 2 * PI * r
}
/**
* 计算圆的面积
* @param r
* @returns {number}
*/
function area(r){
return PI * Math.pow(r,2)
}
// 导出:模块中的属性和方法
module.exports = {
perimeter,
area
}
多个模块之间的引用
const b = require('./b.js')
const c = require('./c.js')
function info(){
b.info()
console.log("a.js")
c.info()
}
module.exports = {
info
}
下载第三方模块
安装的时候注意
生产依赖 npm i minify
开发依赖 npm i minify -D
第三方模块的使用
观看文档
实践