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事件的捕获与冒泡阶段

相关推荐
我码玄黄20 分钟前
THREE.js:网页上的3D世界构建者
开发语言·javascript·3d
罔闻_spider21 分钟前
爬虫----webpack
前端·爬虫·webpack
吱吱鼠叔23 分钟前
MATLAB数据文件读写:1.格式化读写文件
前端·数据库·matlab
爱喝水的小鼠40 分钟前
Vue3(一) Vite创建Vue3工程,选项式API与组合式API;setup的使用;Vue中的响应式ref,reactive
前端·javascript·vue.js
小晗同学41 分钟前
Vue 实现高级穿梭框 Transfer 封装
javascript·vue.js·elementui
WeiShuai1 小时前
vue-cli3使用DllPlugin优化webpack打包性能
前端·javascript
forwardMyLife1 小时前
element-plus的面包屑组件el-breadcrumb
javascript·vue.js·ecmascript
ice___Cpu1 小时前
Linux 基本使用和 web 程序部署 ( 8000 字 Linux 入门 )
linux·运维·前端
JYbill1 小时前
nestjs使用ESM模块化
前端
加油吧x青年1 小时前
Web端开启直播技术方案分享
前端·webrtc·直播