0

我有 nodejs 的问题,当我想用​​图像发帖时,我收到一条错误消息“无法读取未定义的属性‘文件名’”

我没有看到我的错误在哪里,你能告诉我吗

这是我的中间件 multer:

const multer = require('multer');

const MIME_TYPES = {
  'image/jpg': 'jpg',
  'image/jpeg': 'jpg',
  'image/png': 'png',
  'image/gif': 'gif',
  
};

const storage = multer.diskStorage({
  destination: (req, file, callback) => {
    callback(null, 'images');
  },
  filename: (req, file, callback) => {  
    const name = file.originalname.split(' ').join('_');
    const extension = MIME_TYPES[file.mimetype];
    callback(null, name + Date.now() + '.' + extension);
  }
});


module.exports = multer({storage: storage}).single('image');

在我的 app.js

app.use('/images', express.static(path.join(__dirname, 'images')));

在我的 post.routes.js

const express = require('express');
const router = express.Router();
const auth = require('../middleware/auth');
const multer = require('../middleware/multer-config')
const postCtrl = require('../controllers/postController');

router.post('/new', auth, multer, postCtrl.createPost);

在我的 postController.js

exports.createPost = (req, res) => {
    
    // Create post in database
    console.log(req.body)
    const article = {
        title: req.body.title,
        content: req.body.content,
        userId: req.body.userId,
        picture: `${req.protocol}://${req.get('host')}/images/${req.file.filename}`
    };
    Post.create(article)
    .then(data => {
      res.send(data);
    })
    .catch(err => {
      res.status(500).send({
        message:
          err.message || "Some error occurred while creating the Article."
      });
    });
}; 
4

3 回答 3

0

我想问题就在这里

picture: `${req.protocol}://${req.get('host')}/images/${req.file.filename}`

可能是您的请求没有属性“文件”,如果您在正文中发送 id,它必须是这样的 - req.body.file.filename

最好检查您的请求。

于 2021-03-05T08:38:12.320 回答
0

在控制器中尝试控制台记录 req.file。如果未定义,则有两种概率

  1. 图片未在请求中发送
  2. 它不是由 multer 存储的

如果它没有被存储,我确实遇到了同样的问题,用 Date.now() 创建文件名不起作用,你可以试试这个

name + '-' + Math.random().toString().slice(2, 6) + '-' + Math.random().toString().slice(2, 6) + extension
于 2021-03-05T08:40:54.573 回答
0

就我而言:

"transform-react-jsx-source".babelrc中删除解决了这个问题。

这是我的.babelrc文件在删除后的样子"transform-react-jsx-source"

{
  "presets": ["babel-preset-expo"],
  "env": {
    "development": {
      "plugins": []
    },
    "production": {
      "plugins": ["transform-remove-console"]
    }
  }
}
于 2021-05-08T07:55:02.810 回答