node-basis

72 阅读4分钟

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)

image.png 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

image.png

开发依赖 npm i minify -D

image.png

第三方模块的使用

观看文档

image.png

实践

image.png

image.png

image.png