Node.js常用知识

Nodejs

总结Node.js基础知识,便于定期回顾

1、fs

文件写入

1、require(‘fs’)

2、fs.writeFile()

3、fs.appendFile()

4、fs.createwriteStream() //流式写入

ws.write()

文件读取

1、fs.readFile(‘’,(err,data)=>{

})

const fs=require('fs')
fs.readFile("D:/Node/Data.txt",(err,data)=>{console.log(data.toString())
})

2、流式读取

const rs=fs.createReadStream('./观书有感.txt')
rs.on('data',chunk=>{console.log(chunk)
})
rs.on('end',()=>{console.log("读取完成");
})

3、边取边存。

const fs=require('fs');const rs=fs.createReadStream('./观书有感.txt');
const ws=fs.createWriteStream('./观书有感2.txt');rs.on('data',chunk=>{ws.write(chunk);
})rs.on('end',()=>{console.log('执行完成')
})

也可以

rs.pipe(ws)

3、内存占用大小

console.log(process.memoryUsage)

4、文件重命名和移动

fs.rename('./座右铭.txt','./论语.txt',err=>{console.log(完成);
});

5、删除文件

//方法一:使用异步回调方法 fs.unlink()
const fs = require('fs');fs.unlink('./观书有感2.txt', (err) => {if (err) {console.error("文件删除失败:", err);return;}console.log("文件删除成功");
});
//方法二:使用同步方法 fs.unlinkSync()
const fs = require('fs');try {fs.unlinkSync('./观书有感2.txt');console.log("文件删除成功");
} catch (err) {console.error("文件删除失败:", err);
}

6、创建对象

const fs=require('fs');
fs.mkdir('./html',err=>{console.log("创建成功");
});

7、递归创建文件

fs.mkdir('./A/B/C',{recursive:true},err=>{console.log("创建成功");
})//删除文件
fs.rm('./')

8、读取文件夹

fs.readdir('./A',(eer,data)=>{if(eer){console.log("读取失败");return;}console.log(data);
});

9、删除文件夹

//递归删除
fs.rmdir('./A',{recursive:true},err=>{})//建议使用
fs.rm('./A',{recursive:true},err=>{})

10、查看资源状态

fs.stat('./A',(err,data)=>{    //旧方法fs.existsif(err){console.log('操作失败')return;}console.log(data)
})

11、__dirname

绝对路径 ’全局变量‘ 保存的是所在文件的所在目录的绝对路径。

fs.writeFile(__dirname+'/index.html')

12、Path

const path=require('path')
console.log(path.resolve(__dirname,'./index.html'));  //该方法将一些的 路径/路径段 解析为绝对路径
console.log(__filename)  //打印文件的绝对路径;
path.parse(str) //解析路径并返回对象
path.basename() 获取路径的基础名称
path.dirname() 获取路径的目录名
path.extname() 获取路径的扩展名

2、HTTP

1、响应状态码

200 请求成功

403 禁止请求

404 找不到资源

500 服务器内部错误

1xx 信息响应

2xx 成功响应

3xx 重定向消息

4xx 客户端错误响应

5xx 服务端错误响应

2、本地回环

127.0.0.1

3、Http协议默认端口是80,HTTPS协议默认端口是443,HTTP服务开发常用端口有3000,8080,8090,9000

4、获取请求HTTP报文

const http=require('http')
const server=http.createServer((request,response)=>{response.setHeader('content-type','text/html;charset=utf-8');//获取请求的方法console.log(request.method)//获取请求的URlconsole.log(request.url)//只包含url中的路径与查询字符串//获取http协议版本号console.log(request.httpVersion);//获取请求头console.log(request.headers)response.end('你好');
})
server.listen(9000,()=>{console.log("服务已经启动...");
})

res.writeHead(200, { ‘Content-type’: ‘text/html;charset=utf-8’ })

response.setHeader(‘content-type’,‘text/html;charset=utf-8’);

express框架中用req.body接收post客户端的数据,req.query接收get请求

http中

req.setEncoding('utf-8');
req.on('data',function(data){console.log(data)
})
req.on('end')

5、获取Http报文中的URL路径与查询字符串

const http=require('http')
const url=require('url');
const server=http.createServer((request,response)=>{let res=url.parse(request.url,true) //获取urllet pathname=res.pathname         //获取url的名称let keyword=res.query.keyword; //获取url的keywordconsole.log(keyword)response.end('url')
})
server.listen(9000,()=>{console.log("服务已经启动...");
})

推荐使用的方法

const http=require('http')
const server=http.createServer((request,response)=>{//实例化URL的对象let url=new URL(request.url,'http://127.0.0.1');//输出路径console.log(url.pathname);//输出keyword查询字符串console.log(url.searchParams.get('keyword'));response.end('url');
})
server.listen(9000,()=>{console.log("服务已经启动...");
})

6、练习 request

const http=require('http')
const server=http.createServer((request,response)=>{response.setHeader('content-type','text/html;charset=utf-8')let {method}=request;let {pathname}=new URL(request.url,'http://127.0.0.1')console.log(method);console.log(pathname);if(method=='GET'&&pathname=='/login'){response.end("登陆页面")}else if(method=='GET'&&pathname=='/reg'){response.end('注册页面')}else{response.end('啥也没有')}
})
server.listen(9000,()=>{console.log("服务已经启动")
})

7、练习、response

response.end 有且只有一个,可以使用response.write写很多内容

8、读取html

const http=require('http')
const fs=require('fs')
const server=http.createServer((request,response)=>{response.setHeader('content-type','text/html;charset=utf-8');let html=fs.readFileSync('./test.html');response.end(html)
});
server.listen(9000,()=>{console.log('服务器启动')
})

9、读取css

const http = require('http')
const fs = require('fs')
const server = http.createServer((request, response) => {//response.setHeader('content-type', 'text/html;charset=utf-8');let {pathname}=new URL(request.url,'http://127.0.0.1');if(pathname=='/'){console.log(pathname)let html = fs.readFileSync(__dirname+'/test.html');response.end(html)}else if(pathname=='/table.css'){console.log(pathname)let css = fs.readFileSync(__dirname+'/table.css');response.end(css)}else{response.statusCode=404;response.end(`<h1>404 not found</h1>`)}});
server.listen(9000, () => {console.log('服务器启动')
})

10、静态文件搭建

const http = require('http')
const fs = require('fs')
const server = http.createServer((request, response) => {//response.setHeader('content-type', 'text/html;charset=utf-8');let {pathname}=new URL(request.url,'http://127.0.0.1');let filepath=__dirname+pathname;fs.readFile(filepath,(err,data)=>{if(err){response.statusCode=500;response.end('文件读取是被~~');return;}response.end(data)})});
server.listen(9000, () => {console.log('服务器启动')
})

10、mime 媒体类型

加不加都可以,加上更规范

let mimes={html:'text/html',css:'text/css',js:'text/javascripts',png:'image/png',jpg:'image/jpeg',gif:'image/gif',mp4:'video/mp4',mp3:'audio/mpeg',json:'application/json'
}
fs.readFile(filepath,(err,data)=>{if(err){response.statusCode=500;response.end('文件读取是被~~');return;}//获取文件的后缀名let ext=path.extname(filepath);let type=mimes[ext]if(type){response.setHeader('content-type',type+';charset=utf-8') //同时解决乱码问题}else{response.setHeader('content-type','application/octet-stream');}///响应文件内容response.end(data)})

3、模块化


1、暴露数据

function tiemo(){console.log('贴膜...');
}
function Fun(){console.log('yes...');
}
//暴露数据方法一
//exports.tiemo=tiemo;
//exports.Fun=Fun;
//module.exports可以暴露任何值
module.exports={tiemo,Fun
}///获取数据//导入模块
const ms=require('./me.js');
ms.tiemo();
ms.Fun();

2、package.json

{"main":"./app.js"
}const me=require('./mode')  //mode是一个文件夹 package.json在文件夹下面
console.log(me)

如果package.json不存在,则会尝试导入文件夹下的index.js和index.json

4、包管理工具


1、npm初始化

npm init

2、npm资源网址

npm (npmjs.com)

3、生产依赖和开发依赖

npm i -S uniq   ------npm i --save uniq          生产
npm i -D less   ------npm i --save-dev less      开发

4、全局安装包的位置

使用 npm root -g 查看

5、npm i

刚拉下来的项目是不能启动的,首先需要npm i一下

6、删除包

npm r 包名

7、配置别名

{"name": "test","version": "1.0.0","description": "学习npm","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","server":"node ./Npms/.index.js" ================在这个位置"start": "node ./Npms/index.js"},"author": "","license": "ISC"
}

后面运行的话,使用npm run server

如果是start,使用npm start。

8、cnpm

npmmirror 镜像站

9、配置npm淘宝镜像

1、安装nrm

npm i -g nrm

2、修改镜像

nrm use taobao

3、检查是否配置成功

npm config list

nrm ls 可以列出支持的镜像地址

10 、yarn

安装

npm i -g yarn

配置镜像

11、报错

如果在运行期间,报错 (因为在此系统上禁止运行脚本)。

解决方法:管理员打开powershell ,运行set-ExecutionPolicy RemoteSigned 点击Y确认。

这是更改计算机的执行策略。

12、 查看配置

yarn config list

13、包管理工具不能混用

14、如果想发布包的话

要用 nrm use npm 修改回来镜像

11、NVM

可以很方便的帮我们切换nodejs版本

5、Express


 npm install express

初体验

//1、导入express
const express=require('express')//2.创建应用对象
const app=express()//3、创建路由
app.get('/home',(req,res)=>{res.end('hello express')
})
//4、监听端口,启动服务
app.listen(3000,()=>{console.log('服务已经启动,端口3000正在监听')
})
app.post('/login',(req,res)=>{res.end('Post')
})
app.all('/test',(req,res)=>{console.log("执行")res.end('执行')
})
//最后找不到 就执行这个
app.all('*',(req,res)=>{console.log("执行")res.end('执行')
})
app.get('/request',(req,res)=>{console.log(req.httpVersion);console.log(req.method)console.log(req.headers);console.log(req.url)console.log(req.path)console.log(req.query)console.log(req.ip)//获取请求头console.log(req.get('host'))res.end('hello express')
})

2、路由参数获取

app.get('/:id.html',(req,res)=>{console.log(req.params.id)  //params相当于所有参数res.end("shang pin lie biao")
})

3、express 对于json的读取

//1、导入express
const express=require('express')
const {singers}=require('./singer.json')   //使用解构赋值可以使导出的js变成一个对象,而不是数组。
//2.创建应用对象
const app=express()
console.log(singers)
app.get('/request',(req,res)=>{console.log(req.httpVersion);console.log(req.method)console.log(req.headers);console.log(req.url)console.log(req.path)console.log(req.query)console.log(req.ip)//获取请求头console.log(req.get('host'))res.end('hello express')
})app.get('/ .html',(req,res)=>{let {id}=req.params;let result =singers.find(item=>{if(item.id===Number(id)){return true;}});console.log(result)
})//4、监听端口,启动服务
app.listen(3000,()=>{console.log('服务已经启动,端口3000正在监听')
})

4、一般响应设置

 //原生响应res.statusCode=404;res.statusMessage='love';res.setHeader('xxx','yyy')res.write('hello express')  //的返回数据是没有经过处理的,原封不动的返回原数据,所见即所得.与res.end成对出现。//可以执行多次res.end('response')       //不允许多次输入//express响应res.status(500);res.set('aaa','bbb');res.send('你好')res.status(500).set('abc','def').send('thisisok')

5、

app.get('/home',(req,res)=>{//跳转响应 重定向//res.redirect('https://www.baidu.com/')//下载响应//res.download(__dirname+'/singer.json');//Json响应res.json({name:'ok',slogin:'YuYu'})//响应文件内容res.sendFile(__dirname+'/test.html');
})

6、中间件的使用

const express=require('express');
const fs=require('fs')
const app=express();
const path=require('path')
function Midd(req,res,next){let {url,ip}=req;fs.appendFileSync(path.resolve(__dirname,'./access.log'),`${url}  ${ip}\r\n`)next();
}
app.use(Midd)  //这种是作用全局
app.get('/home',(req,res)=>{res.send("前台首页")
})
app.get('login',(req,res)=>{res.send("后台首页")
})

第二种 类似于局部使用

const { application } = require('express');
const express=require('express')
const app=express();
app.get('/home',(req,res)=>{res.send('首页')
})
function Mindd(req,res,next){if(req.query.code==='521'){next()}else{res.send('code有问题')}
}
app.get('/admin',Mindd,(req,res)=>{res.send('登陆界面')
})
app.get('/setting',Mindd,(req,res)=>{res.send('设置界面')
})
app.listen(3000,()=>{console.log('服务器监听中。')
})

7、静态资源中间件

//静态资源中间件设置
app.use(express.static(__dirname+'/public'))

问题 路由和静态资源的优先问题

当app.get(‘/’)时,直接http://127.0.0.1:3000/可以访问,也可以访问index.html, 他俩的优先级是啥。

按照自上而下的顺序。

路由响应动态资源,静态资源中间件响应静态资源。

8、请求体

const express=require('express');
const bodyParser = require('body-parser')
const app=express();
// create application/json parser
//const jsonParser = bodyParser.json()// create application/x-www-form-urlencoded parser
const urlencodedParser = bodyParser.urlencoded({ extended: false })app.get('/login',(req,res)=>{res.sendFile(__dirname+'/form.html')
})
app.post('/login',urlencodedParser,(req,res)=>{console.log(req.body)res.send('获取用户的数据')
})
app.listen(3000,()=>{console.log('服务器运行中...')
})

9、防盗链

防止外部网站盗用本网站内容

const express=require('express')const app=express();app.use((req,res,next)=>{let referer=req.get('referer');if(referer){let url=new URL(referer);let hostname=url.hostname;if(hostname!=='127.0.0.1'){res.status(404).send('<h1>404 Not Found</h1>')return;}}next();
})app.use(express.static(__dirname+'/public'));app.listen(3000,()=>{console.log("服务器已经启动,端口3000.。。")
})

10、路由的模块化

const express = require('express')
const adminRouter=require('./routes/adminRouter');
const loginRouter=require('./routes/loginRouter')
const app = express();
//设置
app.use(adminRouter);
app.use(loginRouter);
app.listen(3000, () => {console.log("服务器执行。。。。")
})
---------------------------------------------------
const express =require('express');
const router=express.Router();
router.get('/login', (req, res) => {console.log('login执行')res.send('login执行');
})
module.exports=router;

11、模版引擎

模版引擎是分离用户界面和业务数据的一种技术

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单调队列 滑动窗口(题目分析+C++完整代码)

滑动窗口/单调队列 原题链接 AcWing 154. 滑动窗口 题目描述 给定一个数组。 有一个大小为 k的滑动窗口&#xff0c;它从数组的最左边移动到最右边。 你只能在窗口中看到 k个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子&#xff1a; 该数组为 [1 3 -1 -3 5 3 6 7…

爬虫基础(四)线程 和 进程 及相关知识点

目录 一、线程和进程 &#xff08;1&#xff09;进程 &#xff08;2&#xff09;线程 &#xff08;3&#xff09;区别 二、串行、并发、并行 &#xff08;1&#xff09;串行 &#xff08;2&#xff09;并行 &#xff08;3&#xff09;并发 三、爬虫中的线程和进程 &am…

【C++】B2120 单词的长度

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述&#x1f4af;我的做法代码实现&#xff1a;思路解析&#xff1a; &#x1f4af;老师的第一种做法代码实现&#xff1a;思路解析&#xff1a; &#x1f4af;老师的…

nvm的安装和使用

打开地址下载 https://github.com/coreybutler/nvm-windows/releases 推荐下载&#xff0c;nvm-setup.zip 这个。可能有的教程会让下载nvm-noinstall.zip 。noinstall确实下载之后不用安装&#xff0c;但是要自己配置setting.txt文件&#xff0c;以及环境变量 。 安装nvm 在电…

嵌入式知识点总结 操作系统 专题提升(四)-上下文

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.上下文有哪些?怎么理解? 2.为什么会有上下文这种概念? 3.什么情况下进行用户态到内核态的切换? 4.中断上下文代码中有哪些注意事项&#xff1f; 5.请问线程需要保存哪些…

Python在线编辑器

from flask import Flask, render_template, request, jsonify import sys from io import StringIO import contextlib import subprocess import importlib import threading import time import ast import reapp Flask(__name__)RESTRICTED_PACKAGES {tkinter: 抱歉&…

web-SQL注入-CTFHub

前言 在众多的CTF平台当中&#xff0c;作者认为CTFHub对于初学者来说&#xff0c;是入门平台的不二之选。CTFHub通过自己独特的技能树模块&#xff0c;可以帮助初学者来快速入门。具体请看官方介绍&#xff1a;CTFHub。 作者更新了CTFHub系列&#xff0c;希望小伙伴们多多支持…

力扣动态规划-19【算法学习day.113】

前言 ###我做这类文章一个重要的目的还是记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&#xff01;&#xff01;&#xff01; 习题 1.矩形中移动的最大次数 题目链接…

js笔记(黑马程序员)

js&#xff08;day2&#xff09; 一、运算符 1.赋值运算符 运算符作用加法赋值-减法赋值*乘法复制/除法赋值%取余赋值 2.一元运算符 符号作用说明自增变量自身的值加1&#xff0c;如X--自减变量自身的值减1&#xff0c;如X-- 3.比较运算符 运算符作用>左边是否大于右…

使用Pygame制作“青蛙过河”游戏

本篇博客将演示如何使用 Python Pygame 从零开始编写一款 Frogger 风格的小游戏。Frogger 是一款早期街机经典&#xff0c;玩家需要帮助青蛙穿越车水马龙的马路到达对岸。本示例提供了一个精简原型&#xff0c;包含角色移动、汽车生成与移动、碰撞检测、胜利条件等关键点。希望…

联想拯救者Y9000P IRX8 2023 (82WK) 原厂Win11 家庭中文版系统 带一键还原功能 安装教程

安装完重建winre一键还原功能&#xff0c;和电脑出厂时的系统状态一模一样。自动机型专用软件&#xff0c;全部驱动&#xff0c;主题壁纸&#xff0c;自动激活&#xff0c;oem信息等。将电脑系统完全恢复到出厂时状态。 支持机型 (MTM) : 82WK 系统版本&#xff1a;Windows 1…

2025年02月02日Github流行趋势

项目名称&#xff1a;oumi 项目地址url&#xff1a;https://github.com/oumi-ai/oumi 项目语言&#xff1a;Python 历史star数&#xff1a;1416 今日star数&#xff1a;205 项目维护者&#xff1a;xrdaukar, oelachqar, taenin, wizeng23, kaisopos 项目简介&#xff1a;构建最…

【Elasticsearch】硬件资源优化

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

AJAX笔记原理篇

黑马程序员视频地址&#xff1a; AJAX-Day03-01.XMLHttpRequest_基本使用https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p33https://www.bilibili.com/video/BV1MN411y7pw?vd_sour…

Unity Shader Graph 2D - 跳动的火焰

在游戏中&#xff0c;火焰是一种常见的特效。通常来讲火焰特效通过粒子系统的方式实现的相对较多&#xff0c;本文将通过Shader Graph的方式来实现一种不同的火焰效果。 那么怎么实现呢 首先创建一个名为Fire的Shader Graph文件&#xff0c;然后创建一个名为M_Fire的材质球。 …

【二分题目】

二分 分巧克力求阶乘计算方程 分巧克力 分巧克力 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) {Scanner scan new Scanner(System.in);//在此输入您的代码...int nscan.nextInt…

集合通讯概览

集合通信概览 &#xff08;1&#xff09;通信的算法 是根据通讯的链路组成的 &#xff08;2&#xff09;因为通信链路 跟硬件强相关&#xff0c;所以每个CCL的库都不一样 芯片与芯片、不同U之间是怎么通信的 多卡训练&#xff1a;多维并行&#xff08;xxx并行在上一期已经讲述…

GWO优化SVM回归预测matlab

灰狼优化算法&#xff08;Grey Wolf Optimizer&#xff0c;简称 GWO&#xff09;&#xff0c;是由澳大利亚格里菲斯大学的 Mirjalii 等人于 2014 年提出的群智能优化算法。该算法的设计灵感源自灰狼群体的捕食行为&#xff0c;核心思想是对灰狼社会的结构与行为模式进行模仿。 …

LLM - 基于LM Studio本地部署DeepSeek-R1的蒸馏量化模型

文章目录 前言开发环境快速开始LM Studio简单设置模型下载开始对话 模型选择常见错误最后 前言 目前&#xff0c;受限于设备性能&#xff0c;在本地部署的基本都是DeepSeek-R1的蒸馏量化模型&#xff0c;这些蒸馏量化模型的表现可能并没有你想象的那么好。绝大部分人并不需要本…

csapp笔记3.6节——控制(1)

本节解决了x86-64如何实现条件语句、循环语句和分支语句的问题 条件码 除了整数寄存器外&#xff0c;cpu还维护着一组单个位的条件码寄存器&#xff0c;用来描述最近的算数和逻辑运算的某些属性。可检测这些寄存器来执行条件分支指令。 CF&#xff08;Carry Flag&#xff09…