Node.js学习笔记-未完待续

本文介绍了如何使用Node.js进行文件系统操作,包括读写文件,路径处理,以及创建简单的web服务器。通过实践理解模块化概念,并结合HTTP模块实现定制响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浏览器中的JavaScript运行环境

 

 

 

Node.js简介

Node.js官网:Node.jsNode.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.https://nodejs.org/zh-cn/ 

 

Node.js环境安装

 下载地址:Node.jsNode.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.https://nodejs.org/en/

按照菜鸟教程安装。

 

使用node运行JS代码

 

 用cd切换执行目录。

 为了避免每次用cd切换路径,可以用powershell

在要运行的文件名的空白处,按住shift,鼠标点右键,找到Windows PowerShell。

fs文件系统模块 

 读取文件内容

fs.readFile()的语法格式

(被中括号包起来的是可选参数)

 

// 导入fs模块
const fs  = require('fs')

//调用fs.readFile()方法
//参数1:读取文件的存放位置
//参数2:读取文件时采用的编码格式,默认是utf8
//参数3:回调函数,拿到读取失败和成功的结果err dataStr
fs.readFile('./files/1.txt', 'utf8', function(err, dataStr){
    //打印失败的结果
    console.log(err)
    console.log('------------')
    //打印成功的结果
    console.log(dataStr)
})

 

const fs = require('fs')

fs.readFile('./files/1.txt', 'utf8', function(err, dataStr){
    if(err){
        return console.log('读取文件失败!'  + err.message);
    }
    console.log('读取文件成功!' + dataStr)
})

向指定文件中写入内容

 

//导入fs文件系统模块
const fs = require('fs')

//调用fs.writeFile()方法写入文件的内容
//参数1:文件存放的路径
//参数2:要写入的内容
//参数3:回调函数
fs.writeFile('./files/2.txt', 'abcd', function(err){
    //如果文件写入成功,err的值是null
    //如果文件写入失败,err的值是错误对象
    console.log(err);
})

 

//导入fs文件系统模块
const fs = require('fs')

//调用fs.writeFile()方法写入文件的内容
//参数1:文件存放的路径
//参数2:要写入的内容
//参数3:回调函数
fs.writeFile('./files/3.txt', 'ok123', function(err){
    //如果文件写入成功,err的值是null
    //如果文件写入失败,err的值是错误对象
    if(err){
        //因为具体的对象是true就会执行if,null是fasle就不执行if
        return console.log('文件写入失败!' + err.message);
    }
    console.log('文件写入成功!');
})

 案例:整理成绩黑马程序员Node.js全套入门教程,nodejs最新教程含es6模块化+npm+express+webpack+promise等_Nodejs实战案例详解_哔哩哔哩_bilibili本套课程作为框架前置课,重点为学生铺垫 npm、包、模块化、身份认证、CORS 跨域等主要知识点,为学习后面的 Vue 课程夯实基础。同时,本课程涵盖了 MySQL 数据库、API 接口项目开发等后端内容,拓宽了学生的知识面,为前端学生构建了前后端完整的知识体系,助力学生更好地发展。https://www.bilibili.com/video/BV1a34y167AZ?p=8

//导入fs模块
const fs = require('fs')

//调用fs,readFile()读取文件的内容
fs.readFile('./素材/成绩.txt', 'utf8', function(err, dataStr){
    //判断是否读取成功
    if(err){
        return console.log('读取文件失败!' + err.message);
    }
    // console.log('读取文件成功!' + dataStr);
    //把数组的数据按照空格分割
    const arrOld = dataStr.split(' ')
    //循环分割后的数组,对每一项数据进行字符串的替换
    const arrNew = []
    arrOld.forEach(item => {
        arrNew.push(item.replace('=', ':'))
    })
    //把新数组中的每一项进行合并得到一个新的字符串
    const newStr = arrNew.join('\r\n')
    
    //调用fs.writeFile(),把新数组存放到新文件里
    fs.writeFile('./files/成绩-ok.txt', newStr, function(err){
        if(err){
            return console.log('写入文件失败!' + err.message);
        }
        console.log('写入成功!');
    })
})

处理路径问题

 完整的存放路径的写法:

C:\\Users\\Administrator\\Desktop\\Node.js基础\\day1\\code\\files\\1.txt

最好的写法是:

__dirname + '/files/1.txt'

__dirname表示当前文件所处的文件夹。

path路径模块

路径拼接

 

 

获取路径中的文件名

 

获取路径中的文件扩展名

案例:读取HTML CSS JS文件

黑马程序员Node.js全套入门教程,nodejs最新教程含es6模块化+npm+express+webpack+promise等_Nodejs实战案例详解_哔哩哔哩_bilibili本套课程作为框架前置课,重点为学生铺垫 npm、包、模块化、身份认证、CORS 跨域等主要知识点,为学习后面的 Vue 课程夯实基础。同时,本课程涵盖了 MySQL 数据库、API 接口项目开发等后端内容,拓宽了学生的知识面,为前端学生构建了前后端完整的知识体系,助力学生更好地发展。https://www.bilibili.com/video/BV1a34y167AZ?p=11

http模块

 

服务器相关的概念

 IP地址

 域名和域名服务器

 端口号

创建最基本的web服务器

//导入http模块
const http = require('http')

//创建web服务器实例
const server = http.createServer()

//为服务器实例绑定request事件,监听客户端的请求
server.on('request', function(req, res){
    console.log('有人访问了服务器');
})

//启动服务器
server.listen(8080, function(){
    console.log('服务器在 http://127.0.0.1:8080 运行');
})

 

 

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

const http = require('http')

const server = http.createServer()

server.on('request', (req, res)=>{
    //获取请求的url地址,不会变化的是常量用const
    const url = req.url
    //设置变量用let,即响应的内容,默认为404
    let content = '404 Not found!'
    //判断用户请求的是否是/或/index.html首页
    //判断用户请求的是否是/about.html页面
    if(url === '/' || url === '/index.html'){
        content = `<h1>首页</h1>`
    }else if(url === '/about.html'){
        content = `<h1>关于页面</h1>`
    }
    //设置Content-Type响应头,防止中文乱码
    res.setHeader('Content-Type', 'text/html; charset=utf-8')
    res.end(content)
})

server.listen(80, ()=>{
    console.log('服务器运行在 http://127.0.0.1');
})

 案例:时钟web服务器

 

//导入http模块
const http = require('http')
//导入fs模块
const fs = require('fs')
//导入path模块
const path = require('path')

//创建web服务器
const server = http.createServer()
//监听web服务器的request事件
server.on('request', (req, res)=>{
    //获取客户端请求的url地址
    const url = req.url
    //把请求的url地址映射为具体文件的存放路径(说明:因为客户端请求的url是/clock/index.html  /clock/index.css  /clock/index.js,而clock文件夹在当前文件夹下面,可以用__dirname获取当前文件夹地址,再拼接上获取的url,就是文件的存放路径)
    // const fpath = path.join(__dirname, url)
    //优化路径
    //预定义一个空白的文件存放路径
    let fpath = ''
    if(url === '/'){
        fpath = path.join(__dirname, './clock/index.html')
    }else{
        //这时用户输入的是 /index.html 或 /index.css 或 /index.js
        fpath = path.join(__dirname, '/clock', url)
    }

    //根据映射过来的文件路径读取文件的内容
    fs.readFile(fpath, 'utf8', (err, dataStr)=>{
        if(err) return res.end('404 Not found')
        res.end(dataStr)
    })
})
//启动服务器
server.listen(80, ()=>{
    console.log('服务器运行在 http://127.0.0.1');
})

模块化的概念

Node.js中的模块化

 加载模块

Node.js中的模块作用域

向外共享模块作用域

 

module.exports对象的使用

 

 

 

exports对象

 

exports与module.exports的使用误区

 CommenJS模块化规范

 

 包的概念

 https://www.npmjs.com/

 https://registry.npmjs.org/

使用包

在终端输入

npm i 包的完整名称

点击回车

//导入需要的包
const moment = require('moment')

const dt = moment().format('YYYY-MM-DD HH:mm:ss')
console.log(dt);

每个包的用法都可以去www.npmjs.com 上面搜用法,看文档。

使用npm的注意点

 

 

 

 

 

 

解决下包慢的问题

 

 包的分类

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值