当前位置: 首页 > article >正文

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、模版引擎

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


http://www.kler.cn/a/529829.html

相关文章:

  • LabVIEW如何高频采集温度数据?
  • 自定义数据集 使用paddlepaddle框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测
  • 深入剖析 HTML5 新特性:语义化标签和表单控件完全指南
  • leetcode 844 比较含退格的字符串
  • 好用的翻译工具
  • 动态规划DP 背包问题 完全背包问题(题目分析+C++完整代码)
  • 在Qt中,slots 关键字有什么用?
  • GIt使用笔记大全
  • 面经-C语言——指针相关概念总结
  • 1. 【.NET Aspire 从入门到实战】--理论入门与环境搭建--引言
  • vue3-element-plus-admin 框架
  • 如何让跨域文件管控简单又高效
  • Hot100之贪心算法
  • 记录一下【Facebook 】expansionToken参数逆向
  • lstm代码解析1.1
  • Ubuntu 下 nginx-1.24.0 源码分析 main函数 — ngx_cdecl 宏
  • kamailio-Core 说明书 版本:Kamailio SIP Server v6.0.x(稳定版)
  • 效用曲线的三个实例
  • c++井字棋(单人对电脑:1.电脑随机下 2.电脑AI;3.双人对决)
  • Python Web框架比较:Flask与FastAPI的特性和应用场景
  • Mask R-CNN与YOLOv8的区别
  • 【HTML入门】Sublime Text 4与 Phpstorm
  • 青少年编程与数学 02-008 Pyhon语言编程基础 15课题、运用函数
  • DBO-高斯回归预测matlab
  • Day33【AI思考】-函数求导过程 的优质工具和网站
  • Python Django 嵌入 Grafana Dashboard(随手记)