You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express如何获取Kendo React PDFExport通过proxyURL发送的Form Data数据

问题解决方法

原因说明

Express 默认不会解析 multipart/form-data 格式的请求体,Kendo React PDFExport 向 proxyURL 提交的PDF数据正是以该格式封装在Form Data中,因此仅打印req.headers无法获取目标数据。

解决步骤

  • 第一步:安装Express生态下专门处理multipart/form-data请求的中间件multer
npm install multer
  • 第二步:修改服务端代码,调整中间件顺序并新增multer解析逻辑
    修改后的核心代码如下:
const express = require('express');
const { ApolloServer } = require('apollo-server-express');
const typeDefs = require('./db/schema');
const resolvers = require('./db/resolvers');
const {
    GraphQLUpload,
    graphqlUploadExpress,
  } = require('graphql-upload');    

const jwt = require('jsonwebtoken')
const conectarDB = require('./config/db');
const { bootstrap: bootstrapGlobalAgent } = require('global-agent');
// 新增:导入multer
const multer = require('multer');

const cors = require("cors");
require('dotenv').config({path: 'variables.env'});

conectarDB();
bootstrapGlobalAgent();

// 新增:配置multer,如需直接存到本地可替换为diskStorage配置
const storage = multer.memoryStorage()
const upload = multer({ storage: storage })

async function startServer() {
    const server = new ApolloServer({
      typeDefs,
      resolvers,
      cors: {
        credentials:true,
        origin: process.env.PAGINA,
        optionsSuccessStatus:200
      },
      context: ({req}) => {
          const token = req.headers['authorization'] || '';
          if (token) {
              try {
                const usuario = jwt.verify(token.replace('Bearer ', ''), process.env.SECRETA )
                console.log(usuario);
                return {
                  usuario
                }
              } catch (error) {
                console.log("HUBO UN ERROR");
                console.log(error.message);
              }
          }
      }
    });
    
    await server.start();
    
    const app = express();
    try {
        app.use(graphqlUploadExpress());
        app.use(express.static('public'));
        // 调整:将CORS中间件移到路由定义前,否则跨域请求会被拦截
        app.use(cors({
          origin: process.env.PAGINA,
          credentials: true,
          optionsSuccessStatus:200
        }))
        
        // 修改:PDF代理路由新增multer解析,Kendo提交的PDF文件字段名为file
        app.all("/pdf", upload.single('file'), (req, res) => {
            console.log("header", req.headers);
            // 打印Form Data中的PDF文件信息
            console.log("PDF文件内容:", req.file);
            // 打印Form Data中的其他附加参数
            console.log("其他表单参数:", req.body);
            // 后续可自行处理PDF文件,如写入本地存储、上传云存储等
            res.send('Data')
        })

        server.applyMiddleware({ app });

        app.listen({ port: process.env.PORT || 4000}, () => {
          console.log(`Servidor corriendo http://localhost:${process.env.PORT || 4000}${server.graphqlPath}`);
        })
    } catch (error) {
       console.log(error); 
    }
}

startServer();
  • 第三步:触发PDF导出操作,即可在服务端控制台看到Form Data中的完整PDF数据,req.file.buffer为PDF文件的二进制内容,可直接使用。

内容的提问来源于stack exchange,提问作者Richard Vargas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:57:03