nodejs常用模块
小例子
1.
// cls 清屏
// 引入node自带的模块http 可以调用函数 来创建后端服务器
var http = require("http")
// 创建一个服务器对象 回调函数不会直接运行 会在用户每次访问当前计算机的Ip下的8081端口
var app = http.createServer((req, res) => {
// res:后端返回给前端的
// req:前端发送给后端的信息
if (req.url == '/home') {
// 配置返回给用户的数据包的数据格式和编码的类型utf-8
res.setHeader("content-Type", "text/html;charset=utf8")
// 给前端最后一次发送数据包 end调用后连接就结束了
res.end("<h1>jfaogi</h1>")
} else if(req.url == '/car') {
res.setHeader("content-Type", "text/html;charset=utf8")
res.end('car66666')
}
})
// 监听计算机的端口
app.listen(8081)
- 运行node index.js
nodejs
- __filename:所在js文件的目录
- __dirname:所在js文件所在的目录
前两个是返回是字符串
var fs = require('fs')
fs.readFile(__dirname + '/index.html',(err,data)=> {
console.log(err,data.toString)
})
http模块
引入
var http = require('http')
创建服务器
- req:客户端输入到浏览器的网址
- res:后端操作的数据包
var app = http.createServer((req,res)=>{
res.end()
// 具体的业务
})
服务器监听的端口号
app.listen(8392)
fs模块
fs模块的作用与文件的操作,此模块的方法分为同步和异步两种,异步的方法函数最后一个参数为回调函数,回调函数的第一个参数是错误信息,建议使用异步方法
引入
var fs = require('fs')
-
fs.readFile(”,(err,data)=>{})
读取文件
fs.readFile('ex27.html',(err,data)=>{ if(err) { console.log(err) } else { console.log(data) } })
注意:读取是异步的,谁先读完谁先读
-
fs.open(path, flags[, mode], callback)
打开文件
- path – 文件的路径。
- flags – 文件打开的行为。具体值详见下文。
- mode – 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。
- callback – 回调函数,带有两个参数如:callback(err, fd)。
Flag 描述 r 以读取模式打开文件。如果文件不存在抛出异常。 r+ 以读写模式打开文件。如果文件不存在抛出异常。 rs 以同步的方式读取文件。 rs+ 以同步的方式读取和写入文件。 w 以写入模式打开文件,如果文件不存在则创建。 wx 类似 ‘w’,但是如果文件路径存在,则文件写入失败。 w+ 以读写模式打开文件,如果文件不存在则创建。 wx+ 类似 ‘w+’, 但是如果文件路径存在,则文件读写失败。 a 以追加模式打开文件,如果文件不存在则创建。 ax 类似 ‘a’, 但是如果文件路径存在,则文件追加失败。 a+ 以读取追加模式打开文件,如果文件不存在则创建。 ax+ 类似 ‘a+’, 但是如果文件路径存在,则文件读取追加失败。 fs.open(root + '/ex27.html','r+',(err)=>{ if(err) { console.log(err) } else { console.log('open file') } })
-
fs.writeFile(file, data[, options], callback)
可能会有权限问题
- file – 文件名或文件描述符。
- data – 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。
- options – 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 ‘w’
- callback – 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。
fs.writeFile(root + '/input.txt', 'jsdaiog', (err) => { if (err) { console.log(err) } else { console.log('成功') } })
注意:如果文件没有会创建,但是如果文件夹不存在就会报错
-
fs.unlink(path, callback)
fs.unlink('./input.txt',(err)=> { if(err) { console.log(err) } else { console.log('删除成功') } })
-
fs.mkdir(path[, options], callback)
- path – 文件路径。
- options 参数可以是:
- **recursive **- 是否以递归的方式创建目录,默认为 false。
- mode – 设置目录权限,默认为 0777。
- callback – 回调函数,没有参数。
fs.mkdir('./one/to/index.html',{recursive: true},(err)=> { if(err) { console.log(err) } else { console.log('成功') } })
-
fs.rmdir(path,callback)
fs.rmdir('./one',(err)=> { if(err) { console.log(err) } else { console.log('删除成功') } })
-
fs.appendFile(”,(err)=>{}):拼接内容
fs.writeFile('./index.txt','6666',(err)=> { if(err) { console.log(err) } else { fs.appendFile('./index.txt','88888',(err)=> { console.log('yes') }) } })
同fs.writeFile()一样,如果没有就会创建一个文件
-
fs.rename(oldPath,newPath,(err)=>{}):文件夹或是文件移动或是改名都可以
fs.copyFile('./one/index.txt','./index.txt',(err)=> { if(err) {console.log(err)} else { console('copy') fs.rename('./one/index.txt','./one/index1.txt',(err)=>{}) } })
-
fs.copyFile(oldPath,newPath,(err)=>{}):拷贝文件
fs.copyFile('./one/index.txt','./index.txt',(err)=> { if(err) {console.log(err)} else { console('copy') fs.rename('./one/index.txt','./one/index1.txt',(err)=>{}) } })
-
fs.readir(path,callback):读取目录
fs.readir('./img',(err,arr)=> { console.log(arr) })
文件上传后端Nodejs + axios
旧的路径 fls.filepath
新的路劲 __dirname + “/” + path.basename(fls.filepath)
打开旧的路劲文件 let files fs.readFileSync()
将打开的旧的路径文件写道新的路径中 fs.writeFileSync(newpath,files)
删除旧的文件 fs.unlink(oldpath)
注意点
- 要进行同步的操作,防止文件没有写入到新的路径,旧的文件就被删除
后端核心代码
for (let i = 0; i < fls.length; i++) {
let oldpath = fls[i].filepath
// console.log(oldpath,111111111111111111111)
// 新路劲判断一下
// console.log(i==0,2222222222222222)
if (i == 0) {
var newpath = __dirname + '/../public/goods/' + path.basename(oldpath)
} else if (i == 1) {
var newpath = __dirname + '/../public/user/' + path.basename(oldpath)
}
console.log(newpath,22222222222222222222)
let fileDate = fs.readFileSync(oldpath)
fs.writeFileSync(newpath, fileDate)
if (i == 0) {
bd[fls[i].field] = '/public/goods/' + path.basename(oldpath)
} else if (i == 1) {
bd[fls[i].field] = '/public/user/' + path.basename(oldpath)
}
fs.unlinkSync(oldpath, (err) => {
console.log('删除失败')
})
url模块
网址的组成:协议 域名 pathname querrystring hash(前端路由)
hash是不会发给后台的
- url.parse():把一个网址解析成对象
用url和fs实现静态资源管理
var http = require('http')
var url = require('url')
var fs = require('fs')
var app = http.createServer((req, res) => {
let myurl = url.parse(req.url)
console.log(myurl.pathname)
fs.readFile(__dirname + req.url, (err, data) => {
res.end(data)
})
})
// var app = http.createServer((req, res) => {
// var myurl = url.parse(req.url)
// console.log(myurl)
// if (req.url == '/index.txt') {
// res.end('dakj')
// }
// })
app.listen(5200)
querystring模块
先引入
var querystring = require('querystring')
- querrystring.parse():将查询字符串解析成对象
- querrystring.stringify():将对象解析成查询字符串
mime模块
第三方模块要下载
npm i mime
引入
var mime = require('mime')
- mime.getType(‘txt’):返回文件的类型
- mime.getExtension(“text/plain”)
案例
var http = require("http")
var fs = require("fs")
var querystring = require("querystring")
var url = require("url")
var mime = require("mime")
let app = http.createServer((req,res)=>{
let pathname = url.parse(req.url).pathname
fs.readFile(__dirname + '/src' + pathname,(err,data)=> {
if(!err) {
res.setHeader('content-Type',mime.getType(pathname))
res.end(data)
} else if(pathname == '/ajax1') {
res.setHeader("content-Type","text/json")
res.end('{ajax: "可以返回自定义的json数据"}')
}
else {
res.setHeader("content-Type","text/json")
res.end('dijos')
}
})
}).listen(8080)
路径
页面本地打开
- 本地相对路径
- 本地绝对路径:从根盘符写路径
- 本地相对根路径
页面在网络打开
-
相对网络路径
思考:用户输入网址
-
绝对网络路径
-
网络相对根路径
path模块
-
path.basename(path)
path是一个路径字符串