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.exists
    if(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)
    //获取请求的URl
    console.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) //获取url
    let pathname=res.pathname         //获取url的名称
    let keyword=res.query.keyword; //获取url的keyword
    console.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、模版引擎

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kanass基础教程-创建项目

Kanass是一款国产开源免费的项目管理工具&#xff0c;工具简洁易用&#xff0c;开源免费&#xff0c;之前介绍过kanass的一些产品简介及安装配置方法&#xff0c;本文就从如何创建第一个项目来开始kanass上手之旅吧。 1. 创建项目 点击项目->项目添加 按钮进入项目添加页面…

问题的价值 ( Value of Question ) 公式

一、什么是问题的价值 我们的人生、工作的期间、瞬息万变的商业环境中&#xff0c;我们必然会面对很多问题&#xff0c;也会提出很多问题。 但这些问题是否具有回答的 价值&#xff0c;应该如何 衡量 呢&#xff1f; 简单如&#xff0c;女朋友问今晚应该吃什么、世界如何才能…

Zemax 中带有体素探测器的激光谐振腔

激光谐振腔是激光系统的基本组成部分&#xff0c;在光的放大和相干激光辐射的产生中起着至关重要的作用。 激光腔由两个放置在光学谐振器两端的镜子组成。一个镜子反射率高&#xff08;后镜&#xff09;&#xff0c;而另一个镜子部分透明&#xff08;输出耦合器&#xff09;。…

在GPIO控制器中,配置通用输入,读取IO口电平时,上拉和下拉起到什么作用

上下拉电阻作用 在通用输入的时候&#xff0c;也就是在读某个IO的电平的时候 一定要让IO口先保持一个电平状态&#xff0c;这样才能检测到不同电平状态。 如何保持电平状态&#xff1f; 1. 可以通过芯片内部的上下拉电阻&#xff0c;由于是弱上下拉一般不用 2. 硬件外界一个…

如何使用 DeepSeek 和 Dexscreener 构建免费的 AI 加密交易机器人?

我使用DeepSeek AI和Dexscreener API构建的一个简单的 AI 加密交易机器人实现了这一目标。在本文中&#xff0c;我将逐步指导您如何构建像我一样的机器人。 DeepSeek 最近发布了R1&#xff0c;这是一种先进的 AI 模型。您可以将其视为 ChatGPT 的免费开源版本&#xff0c;但增加…

SAP HCM insufficient authorization, no.skipped personnel 总结归纳

导读 权限:HCM模块中有普通权限和结构化权限。普通权限就是PFCG的权限&#xff0c;结构化权限就是按照部门ID授权&#xff0c;颗粒度更细&#xff0c;对分工明细化的单位尤其重要&#xff0c;今天遇到的问题就是结构化权限的问题。 作者&#xff1a;vivi&#xff0c;来源&…

python-leetcode-二叉树的右视图

199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solut…

冲刺一区!挑战7天完成一篇趋势性分析GBD DAY1-7

Day1. 公开数据库的挖掘太火热了,其中GBD数据库的挖掘又十分的火爆.那我就来挑战一篇GBD、一篇关于趋势性分析的GBD&#xff01; GBD数据库挖掘是目前的四大刊常客&#xff0c;经常出现在顶级期刊上面。这个数据库亮点就是&#xff1a;可视化&#xff0c;统计学简单、而数据可…

Maven全解析:从基础到精通的实战指南

概念&#xff1a; Maven 是跨平台的项目管理工具。主要服务基于 Java 平台的构建&#xff0c;依赖管理和项目信息管理项目构建&#xff1a;高度自动化&#xff0c;跨平台&#xff0c;可重用的组件&#xff0c;标准化的流程 依赖管理&#xff1a; 对第三方依赖包的管理&#xf…

使用LLaMA-Factory对AI进行认知的微调

使用LLaMA-Factory对AI进行认知的微调 引言1. 安装LLaMA-Factory1.1. 克隆仓库1.2. 创建虚拟环境1.3. 安装LLaMA-Factory1.4. 验证 2. 准备数据2.1. 创建数据集2.2. 更新数据集信息 3. 启动LLaMA-Factory4. 进行微调4.1. 设置模型4.2. 预览数据集4.3. 设置学习率等参数4.4. 预览…

复制粘贴小工具——Ditto

在日常工作中&#xff0c;复制粘贴是常见的操作&#xff0c;但Windows系统自带的剪贴板功能较为有限&#xff0c;只能保存最近一次的复制记录&#xff0c;这对于需要频繁复制粘贴的用户来说不太方便。今天&#xff0c;我们介绍一款开源、免费且功能强大的剪贴板增强工具——Dit…

无人机图传模块 wfb-ng openipc-fpv,4G

openipc 的定位是为各种模块提供底层的驱动和linux最小系统&#xff0c;openipc 是采用buildroot系统编译而成&#xff0c;因此二次开发能力有点麻烦。为啥openipc 会用于无人机图传呢&#xff1f;因为openipc可以将现有的网络摄像头ip-camera模块直接利用起来&#xff0c;从而…

Redis代金卷(优惠卷)秒杀案例-多应用版

Redis代金卷(优惠卷)秒杀案例-单应用版-CSDN博客 上面这种方案,在多应用时候会出现问题,原因是你通过用户ID加锁 但是在多应用情况下,会出现两个应用的用户都有机会进去 让多个JVM使用同一把锁 这样就需要使用分布式锁 每个JVM都会有一个锁监视器,多个JVM就会有多个锁监视器…

国产之光DeepSeek架构理解与应用分析

目录 初步探索DeepSeek的设计 一、核心架构设计 二、核心原理与优化 三、关键创新点 四、典型应用场景 五、与同类模型的对比优势 六、未来演进方向 从投入行业生产的角度看 一、DeepSeek的核心功能扩展 二、机械电子工程产业中的具体案例 1. 预测性维护&#xff08;Predictive…

基于微信小程序的医院预约挂号系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

架构技能(四):需求分析

需求分析&#xff0c;即分析需求&#xff0c;分析软件用户需要解决的问题。 需求分析的下一环节是软件的整体架构设计&#xff0c;需求是输入&#xff0c;架构是输出&#xff0c;需求决定了架构。 决定架构的是软件的所有需求吗&#xff1f;肯定不是&#xff0c;真正决定架构…

【学习笔记】深度学习网络-正则化方法

作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程&#xff0c;深度学习领域研究生必读教材),开始深度学习领域学习&#xff0c;深入全面的理解深度学习的理论知识。 在之前的文章中介绍了深度学习中用…

c/c++高级编程

1.避免变量冗余初始化 结构体初始化为0&#xff0c;等价于对该内存进行一次memset&#xff0c;对于较大的结构体或者热点函数&#xff0c;重复的赋值带来冗余的性能开销。现代编译器对此类冗余初始化代码具有一定的优化能力&#xff0c;因此&#xff0c;打开相关的编译选项的优…

Vue 入门到实战 七

第7章 渲染函数 目录 7.1 DOM树 7.2 什么是渲染函数 7.3 h()函数 7.3.1 基本参数 7.3.2 约束 7.3.3 使用JavaScript代替模板功能 7.1 DOM树 7.2 什么是渲染函数 在多数情况下&#xff0c;Vue推荐使用模板template来创建HTML。然而在一些应用场景中&#xff0c;需要使用J…

小程序-基础加强-自定义组件

前言 这次讲自定义组件 1. 准备今天要用到的项目 2. 初步创建并使用自定义组件 这样就成功在home中引入了test组件 在json中引用了这个组件才能用这个组件 现在我们来实现全局引用组件 在app.json这样使用就可以了 3. 自定义组件的样式 发现页面里面的文本和组件里面的文…