Требуемый объект недоступен в multer.diskStorage ().Ошибка Тело свойства не существует для типа «Запрос» - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь сохранить файлы в локальном хранилище, используя 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;

Я искал переполнение стека для похожих вопросов, но большинство вопросов связано с загрузкой файлов.Файл загружается просто отлично, и я проверил, что req.body тоже нормально, отправив ответ почтальону.Вот запрос.

screenshot of postman

Вот мой код в 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;

Вот 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;

1 Ответ

0 голосов
/ 29 января 2019

Из Документация по Multer :

Обратите внимание, что req.body еще не заполнен полностью.Это зависит от порядка, в котором клиент передает поля и файлы на сервер.

Попробуйте изменить порядок полей POST, указав сначала projectId и contractorId, а загрузку файла - в конце..

...