作用:
- 用于构建服务器端应用程序,如Web应用、API服务等
- 用于构建实时应用程序,如聊天应用、实时协作工具等
- 用于构建Web应用程序,如各种类型的Web应用程序
- 用于构建RESTful API,用于与前端应用或移动应用进行数据交互
Buffer
let buf=Buffer.alloc(10)
console.log(buf) 此方式会将buffer先归0
let buf2=Buffer.allocUnsafe(1000)
console.log(buf2) 此方式不会,所以速度快一点
Buffer.from(String/array)
一个buffer位置最大是255,因为是8个bit
fs读写模块
const fs=require('fs');
fs.writeFile('autocreate.txt','contant',err => {
if (err){
console.log(err)
return
}
})
上面写入文件就是异步执行
fs.writeFileSync 这个方法同步
fs.writeFile('example.txt', data, { flag: 'a' }, (err) => {
if (err) throw err;
});
上面的a代表就是追加写入
createWriteStream 是 Node.js 中一个用于创建可写流的函数。它通常用于创建指向文件的写入流,以便将数据连续写入文件,而不是一次性将所有数据加载到内存中。
以下是一个使用 createWriteStream 创建写入流的简单示例:
const fs = require('fs');
// 创建一个写入流,将数据写入文件
const writeStream = fs.createWriteStream('output.txt');
// 将数据写入流
writeStream.write('这是要写入的第一行数据\n');
writeStream.write('这是要写入的第二行数据\n');
// 关闭流
writeStream.end();
在上面的示例中,我们使用 fs.createWriteStream 创建了一个名为 output.txt 的文件的写入流。然后,我们使用 writeStream.write 方法连续写入两行数据到文件中。最后,我们调用 writeStream.end 方法来关闭流。
注意,在使用 createWriteStream 创建写入流时,需要调用 end 方法来真正关闭流并释放系统资源。否则,流可能会保持打开状态,直到程序退出或资源被强制释放。
读取文件
const fs = require('fs');
// 读取文件内容
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
在上面的示例中,我们使用 fs.readFile 函数读取了名为 example.txt 的文件的内容。我们指定了文件编码为 utf8,并且将文件内容作为回调函数的第二个参数。如果读取文件时出现错误,我们会抛出异常。否则,我们将在控制台打印文件的内容。
请注意,readFile 是一个异步操作,因此它不会阻塞其他代码的执行。如果你需要在读取文件之后执行其他操作,你可以将这些操作放在回调函数中。
createReadStream函数通常用于读取大文件,因为它可以分批读取文件,而不是一次性将整个文件加载到内存中。这使得它适用于处理大型数据文件,并减少内存使用。
const fs = require('fs');
// 创建可读流
const readStream = fs.createReadStream('large-file.txt');
// 设置编码
readStream.setEncoding('utf8');
// 监听数据事件,当有数据可读时触发
readStream.on('data', (chunk) => {
console.log(`读取到的数据:${chunk}`);
});
// 监听 end 事件,当流结束时触发
readStream.on('end', () => {
console.log('读取结束');
});
// 监听 error 事件,当发生错误时触发
readStream.on('error', (err) => {
console.error(`读取文件时出错:${err}`);
});
文件复制
const fs=require('fs');
const rs=fs.createReadStream(‘路径’)
const ws=fs.createWriteStream(‘路径’)
rs.on('data',chunk => {
ws.write(chunk)
})
文件删除
文件夹创建和删除
fs.makedir('',{recursive:true},err =>{
if (err){
recursive 表示的是递归创建
}
})
fs.rmdir('',{recursive:true},err =>{
if (err){
recursive 表示的是递归创建
}
})
查看文件状态
const fs=require('fs');
fs.stat('',(err,data) => {
data.isFile()
data.isDirectory()
})
重命名
const fs = require('fs');
fs.rename('旧文件路径', '新文件路径', (err) => {
if (err) throw err;
console.log('文件已重命名');
});
http
超文本传输协议
http请求报文:
请求行:
- 方法:get/post/put/patch 更新
- url:
- HTTP版本是指客户端使用的HTTP协议版本,例如HTTP/1.1。
请求头部:包含请求的元数据信息,例如请求的数据类型、编码方式等。
空行:用于分隔请求头部和请求数据。
请求体:包含请求的具体数据,例如在POST请求中发送的数据。
http响应报文:
响应行:HTTP版本是指服务器使用的HTTP协议版本,例如HTTP/1.1;状态码表示服务器对请求的处理结果,例如200表示请求成功,404表示未找到资源;
响应头部:包含响应的元数据信息,例如返回的数据类型、编码方式等
空行:用于分隔响应头部和响应数据
响应体:包含服务器返回的具体数据,例如请求成功后的结果数据。响应数据可以是文本、图片、视频等各种形式的数据。
node的模块化
exports=module.exports={}
所以exports=value,用require引入模块是空对象
所以exports . key
=value
npm r 删除包
cnpm
通过cnpm使用淘宝镜像:npm install -g cnpm --registry=https://registry.npm.taobao.org。
将npm设置为淘宝镜像:npm config set registry https://registry.npm.taobao.org。
查看npm镜像设置:npm config get registry。
查看cnpm镜像设置:cnpm config get registry。
express
npm i express
const express=require('express')
const app=express()
app.all('', (req,res) => {
res.end('ss')
})
app.listen(3000, () => {
console.log('服务启动')
})
根据占位符获得路径,
res.statusCode = 404
require可以引入json文件,可以用解构赋值解析
res.status(500).set('xiangyingtou','').send('响应体')
链式设置响应
req . query 可以获得路径参数
静态资源中间件
app.use(express.static(__dirname + '/public'))
根据路径访问获得静态资源
防盗链
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>防盗链</h1>>`
return
}
}
next()
})
看访问是否有refer
ejs
返回网页可以进行列表渲染
处理文件上传
cookie
请求报文的请求头中
是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带,发送到服务器上。
res.setcookie('string','value',{maxAge:60*1000}) /一分钟
res.clearCookie('string')
req.cookies
session
数据存在服务器
权限验证后创建session对象,拥有session_id
,以cookie的形式返回浏览器。下次浏览器请求就会通过该id去对比,用于身份识别
cookie设置内容过多会影响传输效率,单个cookie不超过4k