【问题标题】:multer req.file returns undefined on uploadmulter req.file 在上传时返回 undefined
【发布时间】:2020-08-07 02:08:57
【问题描述】:

我正在制作一个带有身份验证的简单 Express 服务器,但在制作表单以在注册时上传头像时遇到了麻烦。我希望用户能够在注册时输入用户名、电子邮件、密码和图像,并将图像存储在服务器中,并将相对路径存储在用户对象的属性上。有几篇关于类似问题的帖子,但我找不到我的代码有什么问题。

路线:

const passport = require('passport')
const router = express.Router()
const { ensureLoggedIn, ensureLoggedOut } = require('connect-ensure-login')

const multer = require('multer')
const Image = require('./../models/Image.model')
const upload = multer({ dest: './../public/uploads', storage: './../public/uploads' })

  '/signup',
  upload.single('avatar'),
  ensureLoggedOut(),
  (req, res) => {

    console.log(req.file)

    const avatarPath = `/uploads/${req.file.filename}`

    Image.create({
      name: req.file.originalname,
      path: avatarPath
    })

    passport.authenticate('local-signup', {
      successRedirect: '/profile',
      failureRedirect: '/signup',
      failureFlash: true,
    })
  }
)

护照配置:

  'local-signup',
  new LocalStrategy(
    { passReqToCallback: true },
    (req, username, password, avatarPath, next) => {
      const { email } = req.body

      bcrypt
        .hash(password, 10)
        .then((hash) => {
          return User.create({
            username,
            email,
            password: hash,
            avatar: avatarPath,
          })
        })
        .then((user) => next(null, user))
        .catch((err) => next(err))
    }
  )
)

HTML:

        <div class="form-group">
          <label for="username">Username</label>
          <input type="text" name="username" class="form-control">
        </div>
        <div class="form-group">
          <label for="email">Email</label>
          <input type="text" name="email" class="form-control">
        </div>
        <div class="form-group">
          <label for="password">Password</label>
          <input type="password" name="password" class="form-control">
        </div>
        <div class="form-group">
          <label for="avatar">Avatar</label>
          <input type="file" name="avatar" class="form-control" enctype="multipart/form-data">
        </div>
        <button type="submit">Signup</button>
      </form>```



【问题讨论】:

    标签: node.js express multer


    【解决方案1】:

    没关系,我修好了。有几个错误 - 首先我应该在表单的开头定义 enctype,比如;

    &lt;form action="/signup" method="post" enctype="multipart/form-data"&gt;

    然后,虽然我必须在 POST 路由上调用 Multer 来上传文件,但接收请求的是 Passport 中间件。如果我在那里做一个console.log(req.file),它就没有问题了。

    【讨论】:

      猜你喜欢
      • 2019-01-16
      • 2018-08-19
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      • 2020-04-15
      相关资源
      最近更新 更多