繁体   English   中英

Express 4 Multer / req.body和res.json未定义

[英]Express 4 Multer / req.body and res.json not defined

我正在尝试使用Express 4.0和multer 1.1.0上传单个图像文件+文本字段。 图像文件本身可以正确上传到正确的目标位置,但文本字段和响应出现错误:

1)如果登录控制台,则未定义multer的req.body req.file对象

2)res.json(以及在测试时也发送res.send)发生错误-TypeError:res.json不是Object.handle的函数)

multer的配置如下,使用moment.js作为日期,这几乎来自multer Github文档中的逐行:

//standard express-generator server.js requires
//passport.js implementation

var multer   = require('multer');

var storage = multer.diskStorage({
  destination: function(req, file, cb){
    cb(null, './public/photoUploads/' + moment().year() + moment().month());
  },
  filename: function(req, file, cb){
    cb(null, req.user._id + moment().unix());
  }
})

var upload = multer({storage:storage});

require('./app/routes.js')(app, passport); //passport login routes - will eventually move app.post into this file

app.post('/upload/photoData', upload.array('photo'), function(err, req, res) {

   var title = req.body.title;
   var description = req.body.description;
   var photoURL = req.file.filename;

   var jsonResponse = {
     "title": title,
     "description": description,
     "photoURL": photoURL
   }

   console.log(jsonResponse);
   res.json(jsonResponse);
});

这是客户端表单

 <form id="photo-data" method="post" action="/upload/photoData" enctype="multipart/form-data">
        <div class="form-group">
            <div class="modal-body">

                <label for="image" class="control-label">Photo upload</label>
                <input type="file" class="form-control" name="photo" id="photo-main">

                <label for="caption" class="control-label">Title:</label>
                <input type="text" class="form-control" name="title" id="photo-title">

                <label for="long-text" class="control-label">Further description:</label>
                <input type="text" class="form-control" name="description" id="message-text">
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
                <button id="submit-photo" type="submit" class="btn btn-primary">Upload</button>                   
            </div>
      </div>
    </form>

我究竟做错了什么?

Express中错误处理程序的签名是(err, req, res, next) (4个参数),但是Express在处理程序中看到的参数少于参数4,因此它假定您要添加普通的路由处理程序。 问题是路由处理程序参数的顺序错误,应该只是(req, res) 这将解决您的res.json()错误。

对于文件字段,您当前正在告诉multer您希望有多个文件,因此在这种情况下,您需要检查req.files而不是req.file 如果改为使用upload.single('photo') ,则可以使用req.file

至于非文件字段,请通过使用浏览器的开发人员工具检查网络提交表单的请求,确保它们实际上已提交到服务器。

暂无
暂无

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

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