Req.body 在 multer.diskStorage() 中不可用。错误“请求”类型中不存在属性主体

aaK*_*han 0 file-upload node.js express multer

我正在尝试使用 Multer 将文件保存到本地存储,我想要做的是根据 req.body 中的字段指定文件名。

基本上,文件名应该类似于contractorId-projctId。但 VS Code 显示了错误,即 body 属性未在 req 上定义,当我发送文件时,它会将其保存为 undefined-undefined.png。这是我的代码的屏幕截图。我添加此屏幕截图是为了强调 VS Code 对 req.body 的不满。

1]

这是 uploadFiles.js 的代码

// @ts-check
import express from 'express';
import bodyParser from 'body-parser';
import router from './routes/router';

const app = express();

// Setting up middleware
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json({ limit: '15mb' }));


// Setting up routes
app.use('/', router);

// Error handling
app.use('*', (req, res) => {
  res.status(404).json({
    code: 404,
    error: 'Not found',
    msg: "The resource you're looking for doesn't exist",
  });
});

export default app;
Run Code Online (Sandbox Code Playgroud)

我在堆栈溢出中搜索了类似的问题,但最多的问题与文件上传有关。文件上传得很好,我通过向邮递员发送响应来测试 req.body 也很好。这是请求。

邮递员的屏幕截图

这是我在 router.js 中的代码。

// @ts-check
import Router from 'express';
import upload from '../configs/filesUploads';

const router = Router();

router.get('/', (req, res) => {
  res.json({ Okay: true });
});

router.post('/uploads', (req, res) => {
  upload(req, res, (err) => {
    if (err) {
      res.json({
        error: err,
      });
    } else {
      console.log(req.file);
      res.json({ test: 'Meh', body: req.body });
    }
  });
});
export default router;
Run Code Online (Sandbox Code Playgroud)

这是app.js

// @ts-check
import express from 'express';
import bodyParser from 'body-parser';
import router from './routes/router';

const app = express();

// Setting up middleware
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json({ limit: '15mb' }));


// Setting up routes
app.use('/', router);

// Error handling
app.use('*', (req, res) => {
  res.status(404).json({
    code: 404,
    error: 'Not found',
    msg: "The resource you're looking for doesn't exist",
  });
});

export default app;
Run Code Online (Sandbox Code Playgroud)

Mad*_*ard 5

来自multer 文档

请注意,req.body 可能尚未完全填充。这取决于客户端向服务器传输字段和文件的顺序。

尝试重新排列您的 POST 正文字段,将projectId和放在contractorId前面,然后将文件上传放在最后。