1

我无法在我的 put 请求中访问 req.file。我正在尝试将表单中的图像与其他输入一起上传到 MongoDB 中的集合。除了上传图片外,我可以更改集合中的变量。尝试了不同的示例,但无法使其工作。已尝试使用 multer 创建上传变量的不同变体,但我无法使其工作。

这就是我在 ejs 文件中的内容:

<form action="/profile/edit?_method=PUT"  method="POST">
          <h5 class="grey-text text-darken-3">Change your profile:</h5>
          <div class="input-field">
            <label htmlFor="firstName">Firstname:</label>
            <input type="text" id='firstName' name="firstName" value="<%= user.firstName %>" required/>
          </div>
          <div class="input-field">
              <label htmlFor="lastName">Lastname: </label>
              <input type="text" id='lastName' name="lastName" value="<%= user.lastName %>"" required/>
          </div>
          <label htmlFor="gender">Gender:</label>
          <% let def = ""; let m = ""; let w = ""; let o= "";
              if(user.gender == "Male"){m="selected";} 
              else if(user.gender== "Female"){w="selected";}
              else if(user.gender== "Other"){o="selected";}
              else{def="selected";}
          %>
          <div class="input-field col s12">
            <select id="gender" name="gender" value="Women">
              <option  value="" disabled  <%= def %> >Choose your option</option>
              <option value="Male"   <%= m %> >Male</option>
              <option value="Female" <%= w %>>Female</option>
              <option value="Other" <%= o %>>Other</option>
            </select>
          </div>
          <% var theDate = "2015-08-09";
            console.log(theDate);
            console.log(user);
            if(user.birthdate != ""){
              theDate= user.birthdate;
              console.log(theDate);
            }
            console.log("THEDATE: ");
            console.log(theDate);
          %>
          <div class="input-field">
            <label htmlFor="birthdate">Birthday</label>
            <input type="date" data-date="" id="birthdate" name="birthdate" data-date-format="DD MMMM YYYY" value="<%= theDate %>" onChange={this.handleChange}/>
          </div>
          <label for="about">About me:</label>
          <textarea id="about" name="about" ><%= user.about %></textarea>

          <div>
            <label>Cover</label>
            <input type="file" name="profilepicture" id="profilepicture" value=null>
          </div>
          
          <input type="hidden" name="id" value= "<%= user._id %>"/>
          <div class="input-field">
            <button class="btn pink lighten-1">Change Profile</button>
          </div>
        </form>

这是我的路由器文件:

const express= require('express');
const router= express.Router();
const profileController = require('../controllers/profileController');

var multer = require("multer")
var upload = multer({ dest: '/edit' });

router.get('/', profileController.profile_my);
router.get('/edit', profileController.profile_edit_get);
router.put('/edit', upload.single('profilepicture'), profileController.profile_edit_put);

这是在我的控制器文件中:

const profile_edit_put = (req,res) =>{
    console.log(req.file);

    User.findByIdAndUpdate({_id: req.body.id}, {
        $set:{
            firstName: req.body.firstName,
            lastName: req.body.lastName,
            gender: req.body.gender,
            about: req.body.about,
            birthdate: req.body.birthdate,
        }
    })
    .then(result =>{
        console.log(" redirect app");
        res.redirect('/profile');
    })
    .catch(err=>{ 
        console.log(err);
    });
}

不胜感激,我感到有些失落。提前致谢。

4

0 回答 0