Node-Formidable 使用教程
formidable 项目地址: https://gitcode.com/gh_mirrors/formi/formidable
1. 项目介绍
Node-Formidable 是一个用于解析表单数据的 Node.js 模块,特别是文件上传。它拥有高速的multipart解析器,可以自动将文件上传写入磁盘(可选),并提供了一个插件API,允许自定义解析器和插件。Node-Formidable 经过多年的实战检验,具有低内存占用、优雅的错误处理和非常高的测试覆盖率等特点。
2. 项目快速启动
安装
Node-Formidable 支持Node.js 10.13及以上版本。可以使用 npm
或 yarn
进行安装。
npm install formidable
# 或者
yarn add formidable
基础使用示例
以下是一个使用 Node.js 内置 http
模块的基础示例:
const http = require('http');
const formidable = require('formidable');
const server = http.createServer(async (req, res) => {
if (req.url === '/api/upload' && req.method.toLowerCase() === 'post') {
const form = new formidable.IncomingForm();
let fields;
let files;
try {
[fields, files] = await form.parse(req);
} catch (err) {
console.error(err);
res.writeHead(err.httpCode || 400, {'Content-Type': 'text/plain'});
res.end(String(err));
return;
}
res.writeHead(200, {'Content-Type': 'application/json'});
res.end(JSON.stringify({fields, files}, null, 2));
return;
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(`
<h2>With Node.js <code>"http"</code> module</h2>
<form action="/api/upload" enctype="multipart/form-data" method="post">
<div>Text field title: <input type="text" name="title" /></div>
<div>File: <input type="file" name="multipleFiles" multiple="multiple" /></div>
<input type="submit" value="Upload" />
</form>
`);
});
server.listen(8080, () => {
console.log('Server listening on http://localhost:8080/ ...');
});
3. 应用案例和最佳实践
在实际应用中,Node-Formidable 可以与各种Web框架一起使用,比如 Express.js。下面是一个与 Express.js 结合使用的例子:
const express = require('express');
const formidable = require('formidable');
const app = express();
app.get('/', (req, res) => {
res.send(`
<h2>With <code>"express"</code> npm package</h2>
<form action="/api/upload" enctype="multipart/form-data" method="post">
<div>Text field title: <input type="text" name="title" /></div>
<div>File: <input type="file" name="someExpressFiles" multiple="multiple" /></div>
<input type="submit" value="Upload" />
</form>
`);
});
app.post('/api/upload', (req, res, next) => {
const form = new formidable.IncomingForm();
form.parse(req, (err, fields, files) => {
if (err) {
next(err);
return;
}
res.json({fields, files});
});
});
app.listen(3000, () => {
console.log('Server listening on http://localhost:3000 ...');
});
4. 典型生态项目
Node-Formidable 是一个成熟的模块,它已经被集成到许多生态项目中。以下是一些典型的使用 Node-Formidable 的项目:
- multer: 一个中间件,用于处理
multipart/form-data
类型的表单数据,主要用于上传文件。 - aws-sdk: AWS SDK for JavaScript,支持使用 Node-Formidable 上传文件到 Amazon S3。
- Azure Storage: Azure Storage Node.js 客户端库,支持使用 Node-Formidable 上传文件到 Azure Blob 存储服务。
这些项目展示了 Node-Formidable 在不同场景下的灵活性和强大功能。
formidable 项目地址: https://gitcode.com/gh_mirrors/formi/formidable
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考