繁体   English   中英

req.body 似乎未定义

[英]req.body seems to be undefined

我正在尝试使用 multer 和 postman 上传图像,并且上传正常。 我刚遇到一个(大)问题:当我希望它是 req.body.name + "jpg" 时,照片的名称总是 undefined.jpg。 req.body 有问题吗? 这是我的代码: 在 router.js 中:

const router = require("express").Router();
const userController = require("../controllers/user.controller");
const authController = require("../controllers/auth.controller");
const uploadController = require("../controllers/upload.controller")
const multer = require("multer")

// auth
router.post("/register", authController.signUp);
router.post("/login", authController.signIn);
router.get("/logout", authController.logout);
//user display block
router.get("/", userController.getAllUsers);
router.get("/:id", userController.userInfo);
router.put("/:id", userController.updateUser);
router.delete("/:id", userController.deleteUser);
router.patch("/follow/:id", userController.follow);
router.patch("/unfollow/:id", userController.unfollow);
// upload
router.post("/upload", uploadController.upload)
module.exports = router;

在上传.controller.js 中:

const uploadFile = require("../middleware/upload.middleware");
module.exports.upload = async (req, res) => {
  try {
    await uploadFile(req, res);
    if (req.file == undefined) {
      return res.status(400).send({ message: "Please upload a file!" });
    }
    res.status(200).send({
      message: "Uploaded the file successfully: " + req.body.name + ".jpg",
    });
  } catch (err) {
    res.status(500).send({
      message: `Could not upload the file: ${req.body.name + ".jpg"}. ${err}`,
    });
  }
};

在 upload.middleware.js 中:

const util = require("util");
const multer = require("multer");
const maxSize = 2 * 1024 * 1024;
let storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, __dirname + "/../client/public/uploads/profil");
  },
  filename: (req, file, cb) => {
    cb(null, req.body.name + ".jpg");
  },
});
let uploadFile = multer({
  storage: storage,
  limits: { fileSize: maxSize },
}).single("file");
let uploadFileMiddleware = util.promisify(uploadFile);
module.exports = uploadFileMiddleware;

你知道发生了什么吗? 感谢您的帮助

尝试在 index.js 中使用app.use(express.json())

var express = require('express')
var app = express()
var port = process.env.PORT || 8000
var cors = require('cors');
var routes = require('./src/routes');

app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cors());
app.use(routes)

app.listen(port, () => console.log(`localhost:${port}));

基本上在您的upload.controller.js中上传的文件不会在req.body中可用。 您必须在 controller 中使用req.file

const uploadFile = require("../middleware/upload.middleware");
module.exports.upload = async (req, res) => {
  try {
    await uploadFile(req, res);
    if (req.file == undefined) {
      return res.status(400).send({ message: "Please upload a file!" });
    }
    res.status(200).send({
      message: "Uploaded the file successfully: " + req.file.filename 
    });
  } catch (err) {
    res.status(500).send({
      message: `Could not upload the file: ${req.file.filename}. ${err}`,
    });
  }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM