Node的新人入门学习 -三个基础模块

93 阅读3分钟

前言

之前一直把NodeJS当成是一个npm包管理工具,本来一直想摸鱼学来着,奈何既不光明也不正大。最近想要研究服务端渲染,看了教程才发现要会NodeJS的,所以,直接来吧。

image.png

Node认识

Node.js 是一个基于v8引擎的开源和跨平台的 JavaScript 运行时环境,内置的fs模块可以读取磁盘文件;http模块可以开启本地服务器;path模块用于处理文件路径。没有DOM 和其他 Web 平台 API接口。

有很多基于Node.js三大基础模块封装的框架,比如正在用的express就是基于http模块封装的框架。这也侧面说明,http模块的使用其实非常的繁琐(确实)

fs模块,是用来操作文件的模块,包括读取、修改等文件操作

首先需要先在文件中引入该模块,然后就可以在后续代码中使用fs对象中提供的方法了

const fs = require('fs');

fs.readFile方法负责对文件的读取,三个参数分别是路径,编码格式和回调,其中__dirname是当前文件的内置属性,指的是当前文件所在文件夹的绝对路径。下面表示以UTF-8的编码格式读取index.txt,并在回调的第二个形参中返回,第一个形参是错误提示

fs.readFile(__dirname+'/index.txt','utf8',(err,str)=>{

    console.log(err)

    console.log(str)

})

fs.writeFile方法负责对文件的写入,四个参数分别是路径,要写入的内容,编码格式和回调,其中下面表示以UTF-8的编码格式,将'nihao'写入进index.txt,回调中的第一个形参是错误提示。如果对应路径没有该文件则会新建一个文件,但是如果路径出现了不存在的文件夹则会报错。

fs.writeFile(__dirname+'/index.txt','nihao','utf8',(err,str)=>{
        console.log(err)

})

通过fs模块可以对html文件进行切割为js和css和html文件,用readfile读html,同时用正则去匹配对应的js和style标签,并将提取成功的内容去除掉前后闭合标签后用writefile写成独立文件。同时将上面的js和css正则去除为空字符,(替换为一个插入式的标签,replace可以传入正则)就可以得到完整的html

path模块,用来处理文件路径,包括读取文件夹路径等

先要引入该模块

const path=require('path')

path.join方法用于路径的拼接然后传入多个路径,path.join会根据传入的路径进行动态拼接。所有的../都会往上抵消一层路径。

path.join(path,path,......)

path.basename方法用于提取路径中的最后一部分,比如比如./a/index/index.css,最终提取到的就是index.css,最终提取到的就是index.css,option里面传入的,是要剔除的部分,通常是文件扩展名,这样返回的就是不含扩展名的文件名。

path.basename(path,option)

path.extname(path),直接返回文件扩展名

path.extname(path)

http模块

http用于再本地启动一个服务器,通过node 执行js命令的方式在本地启动一个服务器。首先需要require引入http模块,然后通过http模块中的createServer方法创建一个服务器实例

const http =require('http')
const server=http.createServer()

然后调用listen方法开启服务,表示监听该电脑上的某个端口以开启服务。

server.listen(80,()=>{cls
    console.log('宁已经开启服务')
})

其次调用on方法绑定响应回调,当有人请求该域名时便会触发回调,在回调中通过res.end()方法定义返回内容。

req中包含了请求的路径,通过对请求路径进行解析,就可以用fs模块读取对应文件,然后用res.end()将结果返回,达成文件映射的目的

server.on('request',(req,res)=>{
    //req里包含了url地址,res是一个事件集合,red.end("111")表示当前请求返回111
    res.end('1111111111111')
})

结语

工程化工具的学习是前端绕不过去的一道坎,初识Node感觉还是好玩的,等下次摸鱼继续学。

image.png