node 第十四天 基于express的第三方中间件multer node后端处理用户上传文件

  1. Multer 是一个 node.js 中间件,用于处理multipart/form-data 类型的表单数据,它主要用于上传文件。它是写在 busboy 之上的所以非常高效。
  2. 前面我们已经知道了怎样利用express提供的静态资源处理中间件express.static()处理用户请求静态资源文件(图片, js, css等) 接下来学习如何处理用户上传文件, 编写处理上传文件的接口 (以图片为例)
  3. 下面就直接上代码
js 复制代码
const http = require('http');
const fs = require('fs');
const path = require('path');
const express = require('express');
const multer = require('multer');

const app = express();
app.use(express.json());

//文件上传
//https://github.com/expressjs/multer
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    const uploadFile = req.params['upload_file'];
    const filename = path.join(__dirname, `./upload/${uploadFile}`);
    fs.existsSync(filename) || fs.mkdirSync(filename);
    cb(null, filename);
  },
  filename: (req, file, cb) => {
    console.log(file);
    let saveName = req.params['saveName'] || Date.now();
    let extName = path.extname(file.originalname || '.jpg');
    cb(null, saveName + '-' + Date.now() + extName);
  }
});
const upload = multer({ storage: storage });

//express中间件的洋葱模型
app.use('/', (req, res, next) => {
  console.log('根路由');
  next();
  console.log('根路由 洋葱穿透');
});

app.use('/user', (req, res, next) => {
  console.log('用户路由');
  next();
  console.log('用户路由 洋葱穿透');
});
//用户可以指定要保存在哪个文件夹(不存在则创建) 和 保存的文件名
app.use(
  '/user/:upload_file/:saveName',
  (req, res, next) => {
    console.log('上传路由');
    next();
    console.log('上传路由 洋葱穿透');
  },
  upload.array('file'),
  (req, res, next) => {
    console.log(req.headers['content-type'], req.body);
    res.send({ msg: 'upload success !' });
    next();
  }
);

const server = http.createServer(app);
server.listen(3010, () => {
  console.log('listening...');
});
  1. postmen测试一下就可以啦, 注意请求的数据类型应该是multipart/form-data
  2. 上面的代码还提到了express中间件的洋葱模型
    输出顺序是:
    根路由
    用户路由
    上传路由
    上传路由 洋葱穿透
    用户路由 洋葱穿透
    根路由 洋葱穿透

这是express中间件的重要机制, 逻辑上比较像dom事件的捕获与冒泡阶段

相关推荐
xiaofeichaichai1 天前
Webpack
前端·webpack·node.js
问心无愧05131 天前
ctf show web入门111
android·前端·笔记
唐某人丶1 天前
模型越来越强,我们还需要 Agent 工程吗?—— 从价值重估到 Harness 实践
前端·agent·ai编程
智码看视界1 天前
现代Web开发基础:全栈工程师的起航点
前端·后端·c5全栈
JS菌1 天前
手写一个 AI Agent 全栈项目:从沙箱执行到子智能体的完整实现
前端·人工智能·后端
excel1 天前
HLS TS 文件损坏的元凶:Git 提交与拉取
前端
Aphasia3111 天前
https连接传输流程
前端·面试
徐小夕1 天前
万字长文!千万级文档 RAG 知识库系统落地实践
前端·算法·github
threelab1 天前
Three.js 物理模拟着色器 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器