小例子
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)
  1. 运行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是一个路径字符串

版权声明:本文为a立方原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/shuilifang/p/16524847.html