📜  用于解析formdata的node js中间件 - Javascript(1)

📅  最后修改于: 2023-12-03 15:11:17.994000             🧑  作者: Mango

用于解析formdata的node js中间件

简介

在开放式网络环境下,前端与后端之间的通信方式逐渐从简单的同步请求与响应(Synchronous Request/Response)过渡到异步请求与响应(Asynchronous Request/Response),这就需要前端通过异步请求向后端发送数据。

发送数据的方式主要有两种: GET 和 POST。而POST请求中又有两种常用的Content-Type格式:application/json和application/x-www-form-urlencoded格式。如果要通过POST请求发送文件,则需要使用Content-Type格式:multipart/form-data。

在Node.js中,express默认的中间件body-parser只能解析Content-Type为application/x-www-form-urlencoded和application/json格式的数据,不能解析multipart/form-data格式的数据。为了解决这个问题,我们需要使用其他第三方中间件来解析multipart/form-data格式的数据,这里介绍其中一种解析multipart/form-data格式数据的nodejs中间件:multer

使用multer

在使用multer之前需要先安装multer依赖,可以通过下面的命令进行安装:

$ npm install multer --save

使用multer解析multipart/form-data格式数据也比较简单,只需要在需要解析的路由中引入multer并设置相应的参数,例如:

const multer = require('multer')
const express = require('express')
const app = express()

const storage = multer.memoryStorage()
const upload = multer({ storage: storage })

app.post('/upload', upload.single('file'), (req, res) => {
  console.log(req.file)
  res.send('upload success!')
})

app.listen(8080, () => {
  console.log('server start up at localhost:8080')
})

代码解析:

  • 首先引入multer和express库
  • 定义了一个内存存储引擎(memoryStorage),这个存储引擎将文件存储在内存中(而不是磁盘上),因为我们只是为了演示,并不需要在生产环境中这样做。
  • 使用multer中的方法创建一个upload对象,设置存储引擎为上面定义的内存存储引擎。
  • 创建一个路由,指定POST请求的URL为/upload,调用upload.single('file')方法来解析传递上来的formdata数据(single代表上传的是单个文件,'file'是formdata中的文件字段名)。并在路由处理函数中打印出req.file来查看上传的文件对象。
  • 启动服务器,监听8080端口。

上面的示例只是演示了解析formdata数据的功能,并没有对上传的文件进行任何操作,实际应用需要更复杂的处理逻辑,但是这个示例可以作为学习和使用multer的一个非常基础的模板。

multer参数说明

multer具有丰富的配置,在使用multer时可以设置的参数包括:

  • dest: 设置文件的存储路径,默认是系统的临时文件夹。
  • limits: 限制所上传文件的大小,单位是字节(bytes),可以使用字符串的方式表示(例如1MB)。
  • fileFilter: 定义一个函数来过滤上传的文件,只有符合条件的文件才会被保存,否则被忽略。

其他细节可以见官方文档。

总结

使用multer可以方便的解析formdata格式的数据,实现文件上传的功能。multer提供了丰富的配置,可以满足应用的实际需要。因此在Node.js环境下开发文件上传功能时,multer是必不可少的工具之一。