• Node.js浅学


    目录

     环境安装

    fs文件系统模块

     写入文件

    path路径模块

     1.path的语法格式

     2.获取路径中的文件名:path.basename(),可以设置参数得到除去扩展名的文件名

     3.path.extname()得到路径的扩展名

     4.我们将CSS样式利用正则表达式进行解析,然后将内容加载到文件中

    5.定义处理JS脚本的方

    6.自定义resolveHTML方法

     http模块

    1.介绍http模块 

     2.服务器相关概念

     3.创建基本的Web服务器

     解决中文乱码问题

     根据不同的url响应不同的html内容

     实现clock时钟的Web服务器


    1.Dom和Bom 

     JavaScript—DOM与BOM的区别 - HongBV - 博客园 (cnblogs.com)

    2.浏览器中的JS运行环境(代码正常运行的必要环境)

     3.Node.js相当于后端运行环境

     注意事项:

     4.Node.js可以做什么?

     环境安装

    1.两种版本的区别

     2.查看nodejs版本

     使用Node运行JS代码

    1.什么是终端?

    2.在Nodejs中执行JS代码

    在执行文件目录下执行命令: node 文件名即可

    或者shift+右键也可以(Power shell)

     

     输入cls可清除终端

    fs文件系统模块

    引入模块 

    const fs=require('fs')

     1.语法格式

      

     2.测试

    1. //1.引入模块
    2. const fs = require('fs')
    3. //2.读取文件
    4. fs.readFile('./files/1.txt', 'utf8', function (err, dataStr) {
    5. //2.1失败
    6. if (err == null) {
    7. console.log('读取文件失败!'+err.messgae);
    8. }
    9. console.log('-------');
    10. //2.2成功
    11. console.log('读取文件成功!'+dataStr)
    12. })

     写入文件

    1. //1.引入模块
    2. const fs=require('fs');
    3. fs.writeFile('./files/1.txt','abcd',function(err){
    4. //2.进行判断,是否成功
    5. if(err){
    6. return console.log('文件写入成功!');
    7. }
    8. console.log('文件写入失败!');
    9. })

    2.练习:考试成绩整理

    1. const fs = require('fs')
    2. fs.readFile('D:\学习资料文件\NodeJs\day01\files\1.txt', 'utf8', function (err, dataStr) {
    3. if (err) {
    4. return console.log('读取文件失败!' + err.message)
    5. }
    6. console.log('读取文件成功')
    7. const old = dataStr.split(' ')
    8. //数组存储分割的数据
    9. const arrnew = []
    10. old.forEach(item => {
    11. arrnew.push(item.replace('=', ':'))
    12. })
    13. //把数组中的每一项进行合并得到新的
    14. const newarr = arrnew.join('\r\n')
    15. //2.写入到文件
    16. fs.writeFile('D:\学习资料文件\NodeJs\day01\files\1.txt', newarr, function (err) {
    17. if (err) {
    18. return console.log('写入文件失败' + err.message)
    19. }
    20. console.log('成绩写入成功')
    21. })
    22. })

     3.fs-动态路径拼接错误的原因

    会发现node执行目录+相对路径=node文件操作的路径 

     解决:

    1.我们用绝对路径即可解决,但是需要记得双斜杠(移植性差,不利于维护)

    2.console.log(__dirname):表示当前文件所处的目录,然后我们加上相对路径即可

    1. //1.引入模块
    2. const fs = require('fs')
    3. //2.读取文件
    4. fs.readFile(__dirname+'/files/1.txt', 'utf8', function (err, dataStr) {
    5. //2.1失败
    6. if (err == null) {
    7. console.log('读取文件失败!'+err.messgae);
    8. }
    9. console.log('-------');
    10. //2.2成功
    11. console.log('读取文件成功!'+dataStr)
    12. })

    path路径模块

     1.path的语法格式

    注意../会抵消前面一个

    path.join('',''):将路径一个个合并

    1. const path=require('path')
    2. const pathStr=path.join('/a','/b/c','../','/d','e')
    3. console.log(pathStr)
    4. console.log(__dirname)

     path.join()进行路径拼接,再叠加__dirname当前目录

     2.获取路径中的文件名:path.basename(),可以设置参数得到除去扩展名的文件名

    1. const path=require('path')
    2. //1.定义文件的存放路径
    3. const fpath='/a/b/c/index.html'
    4. const fullname=path.basename(fpath)
    5. console.log(fullname)
    6. var nameWithoutExt=path.basename(fpath,'.html')
    7. console.log(nameWithoutExt)

     3.path.extname()得到路径的扩展名

     

     \s表示空白字符,\S表示非空白字符,*表示匹配任意次数

     4.我们将CSS样式利用正则表达式进行解析,然后将内容加载到文件中

    首先加载模块——>定义正则表达式——>然后读取文件——>将读取到的内容传入一个方法中,然后利用正则表达式进行过滤,最后将过滤后的内容传入到指定文件中

    1. const fs=require('fs')
    2. const { resolve } = require('path')
    3. const path=require('path')
    4. //1.利用正则表达式进行匹配这些标签
    5. const regStyle = /', '')
    6. console.log(newCss)
    7. //3.3将提取的样式写入的file中
    8. fs.writeFile(path.join(__dirname,'./clock/index.css'),newCss,function(err){
    9. if(err) return console.log('写入CSS样式失败!'+err.message)
    10. console.log('写入成功!')
    11. })
    12. }

    5.定义处理JS脚本的方

    1. //4.定义处理js脚本的方法
    2. function resolveJS(htmlStr){
    3. //3.1利用正则表达式提取所需要的内容
    4. const r1=regScript.exec(htmlStr)
    5. //3.2将提取的内容进行样式上的替换
    6. const newJS= r1[0].replace('', '')
    7. console.log(newJS)
    8. //3.3将提取的样式写入的file中
    9. fs.writeFile(path.join(__dirname,'./clock/index.js'),newJS,function(err){
    10. if(err) return console.log('写入CSS样式失败!'+err.message)
    11. console.log('写入成功!')
    12. })
    13. }

    6.自定义resolveHTML方法

    1. //5.定义处理HTML的方法:将外联样式匹配一下,然后写到index.html中
    2. function resolveHTML(htmlStr){
    3. //5.2将css和js中的样式文件替换为外联link
    4. const newHTML=htmlStr.replace(regStyle,'').replace(
    5. regScript,''
    6. )
    7. //5.3写入index.html
    8. fs.writeFile(path.join(__dirname,'./clock/index.html'),newHTML,function(err){
    9. if(err) return console.log('写入文件失败!'+err.message)
    10. console.log('写入HTML文件成功')
    11. })
    12. }

    7.总结注意点:

    路径得首先创建好

     http模块

    1.介绍http模块 

    const http = require('http')

     

     2.服务器相关概念

    2.1IP地址相当于电话号码进行通信

     2.2域名和域名服务器

    类似于人的特征,然后域名相当于人的名字进行记忆

    IP地址和域名的关系——>存放再域名服务器(DNS)中可以进行解析

     2.3端口号

     3.创建基本的Web服务器

    创建http模块——>createServer()创建web服务器——>创建request监听对象(server.on()绑定监听事件)——>然后调用服务器实例的listen()方法,即可启动当前的Web服务器

    1. //1.导入http模块
    2. const http = require('http')
    3. //2.创建web服务器实例
    4. const server = http.createServer()
    5. //3.为服务器实例绑定request事件
    6. server.on('request',function(req,res){
    7. console.log('Someone visit our web server.')
    8. })
    9. //4.启动服务器
    10. server.listen(8080,function(){
    11. console.log('server running at http://127.0.0.1:8080')
    12. })

    3.1监听请求对象 

    1. //1.导入http模块
    2. const http = require('http')
    3. //2.创建web服务器实例
    4. const server = http.createServer()
    5. //3.为服务器实例绑定request事件,function()触发函数,也可以是()=>{}
    6. server.on('request', (req) => {
    7. //3.1req.url是客户端的URL地址
    8. const url = req.url
    9. //3.2req.method是客户端请求的method类型
    10. const method = req.method
    11. const str = `请求的${url},请求的方法是${method}`
    12. console.log(str)
    13. })
    14. //4.启动服务器
    15. server.listen(8081, function () {
    16. console.log('server running at http://127.0.0.1:8080')
    17. })

     3.2响应内容

    核心:通过res.end()方法响应请求内容

     

    1. //1.导入http模块
    2. const http = require('http')
    3. //2.创建web服务器实例
    4. const server = http.createServer()
    5. //3.为服务器实例绑定request事件,function()触发函数,也可以是()=>{}
    6. server.on('request', (req,res) => {
    7. //3.1req.url是客户端的URL地址
    8. const url = req.url
    9. //3.2req.method是客户端请求的method类型
    10. const method = req.method
    11. const str = `请求的${url},请求的方法是${method}`
    12. console.log(str)
    13. //3.3服务器进行响应
    14. res.end(str)
    15. })
    16. //4.启动服务器
    17. server.listen(8081, function () {
    18. console.log('server running at http://127.0.0.1:8081')
    19. })

     解决中文乱码问题

    核心:设置响应头接口Content-Type即可

    1. const http=require('http')
    2. const server=http.createServer()
    3. //1.接收请求
    4. server.on('request',(req,res)=>{
    5. //1.定义一个字符串,包含中文内容
    6. const str=`您请求URL地址是${req.url},请求的method类型是${req.method}`
    7. //2.进行响应并且设置响应头防止乱码
    8. res.setHeader('Conntent-Type','text/html;charset=utf-8')
    9. res.end(str)
    10. })
    11. //2.服务端进行监听
    12. server.listen(80,()=>{
    13. console.log('server running at http://127.0.0.1')
    14. })

     根据不同的url响应不同的html内容

    根据用户请求的页面url来判断

     

     然后设置请求头,并将res.end()进行响应

     实现clock时钟的Web服务器

    流程:1.首先创建Web服务器——>2.监听Web服务器的request事件——>3.启动Web服务器

    关键:如何将请求的requesturl地址映射为文件的存放地址

    将url和当前目录地址进行拼接

     然后将映射过来的路径进行响应

    1. // 1.1 导入http模块
    2. const http=require('http')
    3. // 1.2 导入fs模块
    4. const fs=require('fs')
    5. // 1.3 导入path模块
    6. const path=require('path')
    7. // 2.1 创建web服务器
    8. const server=http.createServer()
    9. // 2.2 监听web服务器request事件
    10. server.on('request',(req,res)=>{
    11. // 3.1 获取到客户端请求的url地址
    12. /*
    13. /clock/index.html
    14. /clock/index.css
    15. /clock/index.js
    16. */
    17. const url=req.url // url:/
    18. // 3.2 把请求的url地址映射为具体文件的存放路径
    19. // const fpath=path.join(__dirname,url)
    20. // 5.1预定义空白的存放路径
    21. let fpath=''
    22. if(url==='/'){
    23. fpath = path.join(__dirname,'./clock/index.html')
    24. }else{
    25. /* 当用户输入的以下路径,我们在前面加一个/clock
    26. /index.html
    27. /index.css
    28. /index.js
    29. */
    30. fpath = path.join(__dirname,'/clock',url)
    31. }
    32. // 4.1 根据映射过来的文件路径读取文件的内容
    33. fs.readFile(fpath,'utf8',(err,dataStr)=>{
    34. // 4.2 读取失败,向客户端响应固定的错误消息
    35. if(err){
    36. return res.end('404 NOT FOUND')
    37. }
    38. // 4.3 读取成功,将读取成功的内容,响应给客户端
    39. res.end(dataStr)
    40. })
    41. })
    42. // 2.3 启动web服务器
    43. server.listen(8080,()=>{
    44. console.log('server running at http://127.0.0.1:8080');
    45. })

  • 相关阅读:
    Java数组[I
    Web基础习题
    基于Python的MNIST解析图片文件和标签文件实验报告
    【RH850芯片】RH850U2A芯片平台Spinlock的底层实现
    谷粒商城-基础篇(详细流程梳理+代码)
    统一日志处理
    Xcode 真机调试之Unable to install “xxx“,Code: -402653103
    银行数字化的两难:安全还是效率?
    快捷方式(lnk)--加载&HTA-CS上线
    windows下安装Elasticsearch(es)
  • 原文地址:https://blog.csdn.net/weixin_57128596/article/details/127840016