@ts-stack/multer 简化了将文件上传到基于 Nodejs 的后端

@ts-stack/multer 简化了将文件上传到基于 nodejs 的后端

这个包实际上是著名的 expressjs multer v2.0.0-rc.4 原生包的一个分支。主要对于那些喜欢 promise 风格编程而不是中间件的开发人员来说会很有趣。此外,同样重要的是,这个包是用 typescript 编写的,因此其中的类型支持和上下文文档都是一流的。

安装

确保已安装 node.js >= v20.0.6。可以使用以下命令安装该软件包:

npm install @ts-stack/multer

用法

multer 返回一个具有四个属性的对象:formfields、file、files 和 groups。 formfields 对象包含表单文本字段的值,文件、文件或组对象包含通过表单上传的文件(作为可读流)。

以下示例使用 expressjs 只是为了简单起见。事实上,@ts-stack/multer 不返回中间件,因此对于 expressjs 来说不如原始模块方便。基本使用示例:

UP简历 UP简历

基于AI技术的免费在线简历制作工具

UP简历 128 查看详情 UP简历

import { multer } from '@ts-stack/multer';import express from 'express';import { createwritestream } from 'node:fs';// here `avatar`, `photos` and `gallery` - is the names of the field in the html form.const multer = new multer({ limits: { filesize: '10mb' } });const parseavatar = multer.single('avatar');const parsephotos = multer.array('photos', 12);const parsegroups = multer.groups([{ name: 'avatar', maxcount: 1 }, { name: 'gallery', maxcount: 8 }]);const app = express();app.post('/profile', async (req, res, next) => {  const parsedform = await parseavatar(req, req.headers);  // parsedform.file is the `avatar` file  // parsedform.formfields will hold the text fields, if there were any  const path = `uploaded-files/${parsedform.file.originalname}`;  const writablestream = createwritestream(path);  parsedform.file.stream.pipe(writablestream);  // ...});app.post('/photos/upload', async (req, res, next) => {  const parsedform = await parsephotos(req, req.headers);  // parsedform.files is array of `photos` files  // parsedform.formfields will contain the text fields, if there were any  const promises: promise[] = [];  parsedform.files.foreach((file) => {    const promise = new promise((resolve, reject) => {      const path = `uploaded-files/${file.originalname}`;      const writablestream = createwritestream(path);      file.stream.pipe(writablestream);      writablestream.on('finish', resolve);      writablestream.on('error', reject);    });    promises.push(promise);  });  await promise.all(promises);  // ...});app.post('/cool-profile', async (req, res, next) => {  const parsedform = await parsegroups(req, req.headers);  // parsedform.groups is an object (string -> array) where fieldname is the key, and the value is array of files  //  // e.g.  //  parsedform.groups['avatar'][0] -> file  //  parsedform.groups['gallery'] -> array  //  // parsedform.formfields will contain the text fields, if there were any});

如果您需要处理纯文本的多部分表单,可以使用 .none() 方法,例如:

import { multer } from '@ts-stack/multer';import express from 'express';const parseformfields = new multer().none();const app = express();app.post('/profile', async (req, res, next) => {  const parsedform = await parseformfields(req, req.headers);  // parsedform.formfields contains the text fields});

错误处理

这是错误代码列表:

const errormessages = new map([  ['client_aborted', 'client aborted'],  ['limit_file_size', 'file too large'],  ['limit_file_count', 'too many files'],  ['limit_field_key', 'field name too long'],  ['limit_field_value', 'field value too long'],  ['limit_field_count', 'too many fields'],  ['limit_unexpected_file', 'unexpected file field'],]);

您可以在 multererror#code 属性中看到这些错误代码:

import { Multer, MulterError, ErrorMessageCode } from '@ts-stack/multer';// ...try {  const multer = new Multer().single('avatar');  const parsedForm = await multer(req, req.headers);  // ...} catch (err) {  if (err instanceof MulterError) {    err.code // This property is of type ErrorMessageCode.    // ...  }}

以上就是@ts-stack/multer 简化了将文件上传到基于 Nodejs 的后端的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/467653.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 06:07:07
下一篇 2025年11月8日 06:08:02

相关推荐

  • Node.js中的面向对象编程最佳实践

    Node.js 中的面向对象编程最佳实践 类和对象 类定义: class Person { constructor(name, age) { this.name = name; this.age = age; }} 对象创建: const person = new Person(‘John’, 30…

    2025年12月18日
    000
  • 哪个C++框架最适合特定的项目?

    在 c++++ 项目中选择合适框架的指南:确定项目需求(类型、功能、性能、代码重用)评估框架选项(boost、qt、wxwidgets、nan、opencv)选择满足项目需求的框架(根据实际情况,例如跨平台 gui 和图像处理功能) 在 C++ 项目中选择合适框架的指南 选择正确的 C++ 框架对于…

    2025年12月18日
    000
  • Google App Engine 模块化部署:突破单一代码库限制

    本文旨在澄清google app engine go模块是否必须共享同一代码库的常见误解。我们将深入探讨app engine模块化架构,阐明每个模块不仅可以拥有独立的运行时环境,还能维护各自的代码库。这极大地提升了应用设计的灵活性,允许开发者在同一应用中融合多种语言和技术栈,从而充分利用各语言的优势…

    2025年12月16日
    000
  • App Engine 模块:独立代码库与多运行时配置详解

    app engine 模块允许开发者为同一应用部署独立的 go 代码库,并支持配置不同的运行时环境。这一范式打破了传统上认为所有模块必须共享同一代码库的限制,极大地增强了应用的灵活性和可扩展性。通过为每个模块指定独立的配置文件和根目录,开发者可以构建微服务架构,充分利用不同语言的优势,从而优化应用性…

    2025年12月16日
    000
  • Google App Engine Go 模块:独立代码库与多运行时支持

    Google App Engine(GAE)的模块化设计允许开发者为每个服务(模块)使用独立的源代码库,并支持配置不同的运行时环境。这一特性打破了传统应用共享单一代码库的限制,极大地增强了应用的灵活性、可维护性,并使得在同一应用中集成多种编程语言和技术栈成为可能,从而优化了特定任务的执行效率。 Ap…

    2025年12月16日
    000
  • Debian下Swagger与Kubernetes如何集成

    在Debian操作系统中将Swagger与Kubernetes进行整合,可按照如下流程操作: Debian系统安装Swagger步骤 更新软件包列表并升级已安装的包: sudo apt update && sudo apt upgrade -y 安装Node.js和npm(若尚未安装…

    2025年12月15日
    000
  • Swagger在Debian环境中的性能如何

    OpenAPI规范(即原Swagger)在Debian系统下的运行效率受多种因素影响,包括服务器硬件配置、网络条件、UI与接口的实现方式以及系统的整体优化水平。以下内容将帮助你更好地了解并提升其在Debian平台上的表现: 安装与设置流程 在Debian平台上部署Swagger通常需要先安装Node…

    2025年12月15日
    000
  • Debian系统上Swagger文档如何更新

    在Debian操作系统中对Swagger文档进行更新,通常需要升级Swagger UI或Swagger Editor组件。以下是具体的操作流程: 升级Swagger UI 安装Swagger UI(若尚未完成安装): sudo apt update sudo apt install nodejs n…

    2025年12月15日
    000
  • Debian系统JS依赖如何管理

    本文介绍如何在Debian系统中高效管理JavaScript (JS) 依赖。主要方法是利用Node.js的包管理器npm或Yarn。 方法一:使用npm 安装Node.js和npm: 在终端执行以下命令安装: sudo apt updatesudo apt install nodejs 验证安装:…

    2025年12月15日
    000
  • 如何利用JS日志进行Debian故障排查

    在Debian系统中,JavaScript(JS)日志并非系统故障诊断的首选工具,因为JS主要用于前端Web开发。然而,对于基于Node.js的应用,JS日志能有效帮助定位问题。 以下步骤指导您如何利用JS日志排查Debian系统中Node.js应用的故障: 定位应用: 首先,找到您的Node.js…

    2025年12月15日
    000
  • 如何查看 Debian Node.js 日志

    本文介绍几种在 Debian 系统上查看 Node.js 日志的实用方法。 方法一:利用 systemd 的 journalctl 命令 如果你的 Node.js 应用由 systemd 管理,可以使用 journalctl 命令查看日志。 假设你的 Node.js 服务名称为 my-nodejs-…

    2025年12月15日
    000
  • Debian Node.js 日志中如何查看请求记录

    在 Debian 系统中查找 Node.js 应用的请求日志,需要根据运行环境的不同采取不同的方法: 1. 本地开发环境: 日志通常位于应用的工作目录下,通常是一个名为 logs 的文件夹,包含了应用的日志文件(例如 app.log)。你可以使用文本编辑器或命令行工具 cat 来查看: cat /p…

    2025年12月15日
    000
  • Python 环境如何与 Node.js 并存

    Python 和 Node.js 可在同一台机器上共存,因二者运行时和包管理独立。1. 分别从官方渠道安装 Python 和 Node.js,确保 PATH 正确;2. 使用 pyenv 和 nvm 管理多版本切换,互不干扰;3. 通过 venv 和 node_modules 隔离项目依赖,避免冲突…

    2025年12月14日
    000
  • Node.js版本升级后node-gyp构建错误及解决方案

    本文旨在解决node.js版本升级至20.9.0后,执行`npm install`时遇到的`node-gyp`构建错误,特别是涉及`fetcherror`导致无法下载node.js头文件的问题。文章将分析错误根源,并提供使用yarn作为有效替代方案,同时探讨其他通用的`node-gyp`故障排除策略…

    2025年12月14日
    000
  • Node.js 版本升级中 node-gyp 错误排查与 Yarn 解决方案

    在将 Node.js 版本升级至 20.9.0 等新版本时,开发者常遇到 `node-gyp` 编译原生模块的错误,尤其表现为 Python 环境配置不当或网络下载 Node.js 头文件失败。本文将深入分析这些错误的原因,提供 Python 和构建工具的排查方法,并重点介绍如何通过切换到 Yarn…

    2025年12月14日
    000
  • Node.js版本升级中Node-gyp错误解析与解决方案

    针对node.js版本升级(特别是node 20.9.0)过程中常见的node-gyp编译错误,本教程深入分析了其潜在原因,包括网络连接问题、tls证书验证失败以及python环境配置不当。文章重点推荐使用yarn作为解决依赖冲突和构建问题的有效策略,并提供了其他针对性排查和修复建议,旨在帮助开发者…

    2025年12月14日
    000
  • Stack Exchange API:轻松获取问题正文内容的教程

    本文详细介绍了如何使用Stack Exchange API高效地检索问题正文内容。针对API默认仅返回问题标题的常见困惑,教程阐明了通过在API请求中添加filter=’withbody’参数即可直接获取包含HTML格式的正文,无需进行额外的请求或复杂的解析。通过具体的Pyt…

    2025年12月14日 好文分享
    000
  • 解决Shaka Player编译时Node.js依赖路径缺失问题

    在编译Shaka Player时,用户可能遇到Node.js依赖缺失的错误,即使Node.js已正确安装。本文揭示了该问题通常并非Node.js本身的问题,而是项目目录路径过长或位于特殊位置(如下载文件夹)导致构建工具无法正确解析依赖。解决方案简单直接:将Shaka Player项目文件夹移动到一个…

    2025年12月14日
    000
  • 解决Shaka Player编译失败:Node.js依赖缺失与项目路径优化

    本教程旨在解决Shaka Player编译时遇到的Node.js依赖缺失错误。该问题常因项目目录位于用户特定路径(如Downloads)引起。核心解决方案是将Shaka Player项目移动到更简洁的根目录,从而规避潜在的权限或路径解析问题,确保编译过程顺利进行。 引言:Shaka Player编译…

    2025年12月14日
    000
  • 解决Shaka Player编译错误:Node.js依赖路径问题

    本教程旨在解决Shaka Player编译过程中常见的“Node.js依赖缺失”错误,即使Node.js已正确安装。该问题通常并非Node.js本身的问题,而是由Shaka Player项目文件夹位于过长、包含特殊字符或权限受限的路径(如Downloads文件夹)所导致。通过将项目移动到更简洁的根目…

    2025年12月14日
    000

发表回复

登录后才能评论
关注微信