Node.js简易教程

news2024/11/16 15:45:52

目录

介绍

fs模块

演示

writeFile 异步写入

 appendFile/appendFileSync 追加写入

 createWriteStream流式写入

readFile异步读取文件/readFileSync同步读取文件

 createReadStream流式读取

 文件移动与重命名

 文件删除

 http模块

创建服务

url 格式化

 获取静态文件服务

 node模块化

什么是模块化与模块

什么是模块化项目

模块化优点


介绍

Node.js是JavaScript语言的服务器运行环境。

Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

fs模块

fs模块可以实现与硬盘的交互 

例如 文件的创建 删除,重命名 修改 移动等 还有文件内容的写入 读取以及文件夹的相关操作

演示

writeFile 异步写入

语法: fs.writeFile(file, data[options], callback)

参数说明:

file: 文件名

data: 待写入的数据

options:选项设置(可选)

callback: 写入回调函数

返回值: undefined

//导入fs 模块
const fs = require('fs');
//写入文件
fs.writeFile('./户雨.txt', '今日不会下雨吧', err => {
    //err 写入失败:错误对象  写入成功:null
    if (err) {
        console.log('写入失败');
        return;
    }
})

测试

 

 appendFile/appendFileSync 追加写入

appendFile作用是在文件尾部追加内容 appendFile语法与wirteFile语法完全相同

fs.appendFile(file,data[, options], callback)(异步)

fs.appendFileSync(file, data[, options])(同步)

返回值: 二者都为 undefined

const fs = require('fs')
//调用appendFile
fs.appendFile('./户雨.txt','\r\n应该不会下雨',err=>{
    if(err){
        console.log('写入失败');
        return
    }
    console.log('写入成功');
})

 

 使用writeFile也可以实现追加写,只需要在参数中添加{flag:'a'}参数即可

 

 createWriteStream流式写入

语法 fs.createWriteStream(path[,options])

参数说明: 

path: 文件路径

options: 选项配置(可选)

返回值: Object

const fs = require('fs')
    //创建写入流对象
let ws = fs.createWriteStream('./早发白帝城.txt');
ws.write('朝辞白帝彩云间\r\n')
ws.write('千里江陵一日还\r\n')
ws.write('两岸猿声啼不住\r\n')
ws.write('还有一句忘了...\r\n')
    //关闭写入流
ws.close();

 程序打开一个文件是需要消耗资源的 流式写入可以减少打开关闭文件的次数

流式写入方式适用于 大文件写入或者频繁写入的场景 writeFile适合于写入频繁较低的场景

readFile异步读取文件/readFileSync同步读取文件

语法: fs.readFile(path[,options],callback)

参数说明:

path: 文件路径

options: 选项配置(可选)

callback: 回调函数

返回值 :undefined

const fs = require('fs');
fs.readFile('./早发白帝城.txt', (err, data) => {
    if (err) {
        console.log('读取失败');
        return;
    }
    console.log(data.toString());
})

 也可以直接使用同步读取

 createReadStream流式读取

这里直接使用流式读取和流式写入一个图片当做演示

 

 

 文件移动与重命名

在node.js中, 可以使用rename或renameSync来移动或重名名文件或文件夹

语法:

fs.rename(oldPath,newPath,callback) (异步)

fs.renameSync(oldPath,newPath) (同步)

参数说明:

oldPath: 旧文件路径

newPath: 新文件路径

callback:回调函数

const fs = require('fs')
//移动文件
fs.rename('./户雨.txt','../../part2/天气.txt',err=>{
    if(err){
        console.log('操作失败');
        return;
    }
    console.log('操作成功')
})

 

 文件删除

在node中可以使用unlink或unlinkSync来删除文件 在node.js14版本之后也可以通过fs.rm来进行文件删除

fs.unlink(path,callback)

fs.unlinkSync(path)

参数说明:

path: 文件路径

callback:回调函数

const fs = require('fs')
    //删除文件
fs.unlink('./天气.txt', err => {
    if (err) {
        console.log('删除失败');
        return;
    }
    console.log('删除成功');
})

 

 http模块

创建服务

//导入http模块
const http = require('http');
//创建服务对象
const server = http.createServer((request, response) => {
        response.setHeader('content-type', 'text/html;charset=utf-8')
        response.end('你好 世界');
    })
    //监听端口 启动服务
server.listen(9000, () => {
    console.log('服务已经启动')
})

 注意,在服务监听处如果不明确指出监听端口,则默认监听80端口

url 格式化

通过url模块可以直接获取请求地址的路径和参数

//导入http模块
const http = require('http');
//导入url模块
const url = require('url');
//创建服务对象
const server = http.createServer((request, response) => {

        //解析 requset.url
        let res = url.parse(request.url, true)
        console.log(res)

        //设置请求头
        response.setHeader('content-type', 'text/html;charset=utf-8')
        response.end('你好啊 世界');
    })
    //监听端口 启动服务
server.listen(80, () => {
    console.log('服务已经启动')
})

 浏览器输入路径并且拼接路径参数

http://127.0.0.1/queryName?name=%E5%BC%A0%E9%A3%9E&age=12

回车发起请求

 获取静态文件服务

//导入http模块
const http = require('http');
const fs = require('fs');
//创建服务对象
const server = http.createServer((request, response) => {

        //解析 requset.url
        let { pathname } = new URL(request.url, 'http://127.0.0.1');
        console.log(pathname)
            //拼接文件路径
        let filePath = __dirname + pathname;
        //读取文件 fs 异步 api
        fs.readFile(filePath, (err, data) => {
            if (err) {
                response.statusCode = 500;
                response.end('文件获取失败')
                return;
            }
            response.setHeader('content-type', 'text/html;charset=utf-8')
                //设置响应文件内容
            response.end(data)
        })
        console.log('我要的路径' + filePath)
    })
    //监听端口 启动服务
server.listen(9000, () => {
    console.log('服务已经启动')
})

测试获取静态文件

 再获取app.js

 

 node模块化

什么是模块化与模块

将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为 模块化

其中拆分出的每个文件就是一个模块 模块的内部数据是私有的 不过模块可以暴露内部数据以便其他模块使用

什么是模块化项目

编码时是按照模块一个一个编码的 整个项目就是一个模块化的项目

模块化优点

防止命名冲突

高复用性和高维护性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“卷爆了“的IT互联网行业,为啥至今还有人头铁往里冲?

细数互联网过往的发展史,造就了成千上万的企业家、创业者,众多职场人趋之若鹜地选择互联网行业,想从这个领域捞一桶金。 但不知道从什么时候开始,一篇篇关于互联网红利消失,流量枯竭的文章接踵而至,现在转…

没关系,前端还死不了

前言 网络上的任何事情都可以在《乌合之众》书中找到答案。大众言论没有理性,全是极端,要么封神,要么踩死。不少人喷前端,说前端已死?前端内卷?前端一个月800包吃住? 对此我想说,“…

【python】批量采集次元岛cos美图,只是为了学习~

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 这里写目录标题 前言开发环境:模块使用:代码展示美图欣赏尾语 💝 开发环境: Python 3.8 Pycharm 模块使用: 第三方模块 需要安装 在cmd里面 进行 pip install requests requests >>> 数据请求模块 …

ACWING 高精度-加减乘除 791 - 794

读取字符串的高精度数字,然后用int数组存上,通过最基础的每位加减乘除和进位等操作完成。 下方给出了所有的操作函数,注意函数的所有输入均为vector 的数组,并且数组存储是从数的低位开始存1000 [0,0,0,1],和正常存储…

Linux -- 进阶 Web服务器 虚拟主机 -- 基于端口号

虚拟主机 一个Web 服务器,如果只能运行一个网站的话,那么对于一些经费不是很足的小公司来说, 那就有些奢侈了,资源没有办法完全利用上 ( 无论是 内存,CPU,硬盘,带宽等等 &#xff09…

EIScopus检索 | 2023年智能交通与未来出行国际会议(CSTFM 2023)

会议简介 Brief Introduction 2023年智能交通与未来出行国际会议(CSTFM 2023) 会议时间:2023年7月28日-30日 召开地点:中国长沙 大会官网: CSTFM 2023-2023 International Conference on Smart Transportation and Future Mobility(CSTFM 202…

OpenCL编程指南-3.3矢量数据类型

矢量数据类型 OpenCL C还增加了对矢量数据类型的支持。矢量数据类型如下定义,首先是类型名,具体包括char、uchar、short、ushort、int、uint、float、long或ulong,后面是一个字面值n来定义矢量中的元素个数。对于所有矢量数据类型&#xff0…

母亲节快到了,祝所有母亲节日快乐!Happy Mother‘s Day

《游子吟》唐孟郊 慈母手中线,游子身上衣。 临行密密缝,意恐迟迟归。 谁言寸草心,报得三春晖。 My kind mother has a needle and thread in her hand,Making new clothes for her son who is to travel far away. She is busy sewing c…

FE_Vue学习笔记 Vue监视数据的原理

1 通过更新时的一个问题-this.personList[0] { 更新值 } 不起作用 引入 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script type"text/javascript" src"…

每日一博 - 闲聊“突发流量”的应对之道

文章目录 概述思路 概述 面对“突发流量”的情况,我会采取以下应急措施: 扩容现有资源。这是最直接和最常用的方法。可以通过增加CPU、内存、节点等来扩容。典型案例是双11等大促期间,阿里会大规模扩容幕布等系统以应对流量激增。横向扩展,增加更多服务器或节点。通过增加服务…

lambda处理异常四种方式

最近对接第三方呼叫系统&#xff0c;第三方SDK的所有方法里都有异常抛出&#xff0c;因为用到了lambda&#xff0c;所以异常处理还是很必要的。 本文主要用到了四种解决方案&#xff1a; 直接代码块处理自定义函数式接口&#xff0c;warp静态方法通过Either 类型包装通过Pair 类…

目前收集到好用且免费的ChatGPT镜像站

ChatGPT是一个基于人工智能的聊天机器人&#xff0c;它可以与用户进行自然语言交互。ChatGPT使用了最新的自然语言处理技术&#xff0c;包括深度学习和神经网络&#xff0c;以便更好地理解用户的意图和回答用户的问题。 ChatGPT可以回答各种问题&#xff0c;包括但不限于常见问…

Linux——进程信号2

阻塞信号 信号其他相关常见概念 实际执行信号的处理动作称为信号递达(Delivery) 信号从产生到递达之间的状态,称为信号未决(Pending)。 进程可以选择阻塞 (Block )某个信号。 被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作. 注意,阻塞和忽略…

一文4000字用Jmeter +Maven+jenkins实现接口性能全自动化测试

背景&#xff1a; 首先用jmeter录制或者书写性能测试的脚本&#xff0c;用maven添加相关依赖&#xff0c;把性能测试的代码提交到github&#xff0c;在jenkins配置git下载性能测试的代码&#xff0c;配置运行脚本和测试报告&#xff0c;配置运行失败自动发邮件通知&#xff0c…

分布式id解决方法--雪花算法

uuid&#xff0c;jdk自带&#xff0c;但是数据库性能差&#xff0c;32位呀。 mysql数据库主键越短越好&#xff0c;Btree产生节点分裂&#xff0c;大大降低数据库性能&#xff0c;所以uuid不建议。 redis的自增&#xff0c;但是要配置维护redis集群&#xff0c;就为了一个id&a…

【前后端分离博客】学习笔记01 --- 登录模块Sa-Token

前言 用于记录自己学习博客项目的流程 基于Springboot Vue3 开发的前后端分离博客 项目源码&#xff1a;Blog: 基于SpringBoot Vue3 TypeScript Vite的个人博客&#xff0c;MySQL数据库&#xff0c;Redis缓存&#xff0c;ElasticSearch全文搜索&#xff0c;支持QQ、Gite…

20230509MTCNN2

卷积切分图片 怎么切分图片? 使用opencv,PIL切分图片有什么问题? 慢 使用 卷积来切分图片 卷积的运算过程 类似于切图 卷积 对输入图片的尺寸 有没有 的要求? 就是 输入的图片尺寸 必须大于 卷积核的大小 test1.py import torch from torch import nn""&quo…

springboot + vue3实现视频播放Demo

文章目录 学习链接前言ffmpeg安装ffmpeg配置环境变量分割视频文件 后台配置WebConfig 前端代码video.js示例安装依赖视频播放组件效果 Vue3-video-play示例安装依赖main.js中使用视频播放组件效果 学习链接 ffmpeg官网 长时长视频java存储及vue播放解决方法 【 攻城略地 】vue…

BitKeep逆势崛起:千万用户的信任,终点还未到来

在全球范围内&#xff0c;BitKeep钱包如今已拥有超过千万忠实用户。 当我得知这一令人震撼的数字时&#xff0c;既感到惊讶&#xff0c;同时也觉得这是意料之中的事情。几年来关注BitKeep的发展历程&#xff0c;我深切地感受到了这家公司的蓬勃壮大。回顾2018年他们发布的第一个…

linux0.12-8-9-fork.c

[362页] 1、 verify_area函数给其他文件使用的&#xff0c;跳转开始位置&#xff1b; 2、 copy_mem函数复制内存页表&#xff1b; 3、 copy_process函数是fork.c主要函数&#xff1b; 4、find_empty_process函数就2个作用&#xff1a;在一个范围内找last_pid和找空槽&#xff1…