当前位置: 首页 > 知识库问答 >
问题:

Express 4 Multer/req.bodyres.json未定义

纪鸿禧
2023-03-14

我正在尝试使用Express 4.0上传单个图像文件文本字段

1) 穆特的要求。车身要求。如果登录控制台,则未定义文件对象

2)res.json(测试时也res.send)获取错误-TypeError:res.json不是Object.handle的函数

multer使用力矩配置如下。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>

我做错了什么?

共有1个答案

颜嘉福
2023-03-14

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

对于您的文件字段,您当前告诉 multer 您需要多个文件,因此在这种情况下,您需要检查 req.files 而不是 req.file。如果您改用上传单(“照片”),则可以使用 req.文件

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

 类似资料:
  • 问题内容: 注意:根据 ECMAScript5.1,第15.1.1.3节,window.undefined是只读的。 现代浏览器正确地实现了这一点。 例如:Safari 5.1,Firefox 7,Chrome 20等。 Undefined仍可在以下位置更改:Chrome 14,… 原来,问题的原因是 如果“对象”中没有属性“ x”,则返回false。 我通过在两个Facebook函数中用规则相等

  • 问题内容: 我正在使用PHP版本5.3并尝试在我的代码中使用,但是出现错误: 我仍然可以连接到数据库。为什么不可用? 我正在使用PHP版本5.3。 问题答案: 更新 中提到的评论,一直以来5.5弃用: 自PHP 5.5起不推荐使用mysql扩展。应该改用mysqli或PDO扩展名。否决已在mysql_deprecation中确定,可以在此找到对该决定背后原因的讨论。 并 在PHP 7中删除 。 是

  • 问题内容: 我有一个简单的jquery click事件 以及在site.master中定义的jquery引用 我检查了脚本是否已正确解析,可以在Firebug中查看标记并直接查看脚本,因此必须找到我。但是,我仍然得到: $未定义 而且没有一个jQuery的作品。我还尝试了$(document).ready和jQuery等的各种变体。 这是.net 3.5上的MVC 2应用程序,我确定我真的很密集,

  • 问题内容: 我收到此错误消息, 这是我的标题。 以下是我的JavaScript代码 以下是HTML 我想在输入标签上显示日期选择器。 我正在使用Bootstrap V3.1。 问题答案: 在使用$或jQuery的脚本之前 添加jQuery库 , 以便可以在脚本中标识$。

  • null 下面是我的代码摘要: 和我的表格

  • 问题内容: 我一直看到说使用=>或.bind(this)的答案,但这些解决方案均无效。 解: 问题答案: 当你 与ES2015类语法,你需要你的动作处理程序绑定到你的类的上下文。 试试这个: 通常,最好不要在其中使用箭头函数或方法,因为它会在每次调用时生成该函数的新副本。将函数声明移到。 我个人更喜欢在这种情况下使用箭头函数作为类属性 它不是ES2015规范的一部分,但babel stage-0预