当前位置: 首页 > 面试题库 >

Node.js,multer和req.body为空

谭文林
2023-03-14
问题内容

这是我的问题,我有一个表单,可以在其中插入文件和字段,但仅接收文件而不接收参数test!为什么?

这是我的代码:

app.js:

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
var port = 8000;
var multer = require('multer'); // v1.0.5
var storage =   multer.diskStorage({
  destination: function (req, file, callback) {
    callback(null, './uploads');
  },
  filename: function (req, file, callback) {
    callback(null, file.originalname.substring(0,file.originalname.lastIndexOf('.')) + '-' + Date.now() + file.originalname.substring(file.originalname.lastIndexOf('.'),file.originalname.length));
  }
});
var upload = multer({ storage : storage}).single('fileUpload');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

app.post('/api/upload',function(req,res){
    console.log(req.body);
    upload(req,res,function(err) {
        if(err) {
            return res.end("Error uploading file.");
        }
        res.end("File is uploaded");
    });
});

app.listen(port, function () {
    console.log('Express server inizializzato sulla porta ' + port);
});

index.html:

<html>
    <head>
        <title>Test upload</title>
    </head>
    <body>
        <form name="form" action="http://localhost:8000/api/upload" method="post" enctype="multipart/form-data">
            <input type="text" name="test" />
            <input type="file" name="fileUpload" />
            <input type="submit" value="invia" />
        </form>
    </body>
</html>

有人可以帮我吗?


问题答案:

2017更新

从自述文件

请注意,req.body可能尚未完全填充。这取决于客户端将字段和文件传输到服务器的顺序。

我通过反转前端的表单对象属性的顺序解决了我的问题:

    var newFormObj  = new FormData();
    newFormObj.append('internalUserID', internalUserID);
    newFormObj.append('listingImage', this.binaryImages[image]);

在后端:

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    console.log(req.body.internalUserID) // YAY, IT'S POPULATED
    cb(null, 'listing-pics/')
  },                    
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now())
  }                     
});

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


 类似资料:
  • 由于某种原因,multer上的文件过滤器没有被调用。 这是我的控制器(我使用的是快速路由器) 这是控制器 我有以下问题: 甚至没有调用fileFilter函数,因此它不会验证文件 上载函数(upload:function(req,res))上的req.body为空它仅在磁盘存储和上一个上载函数(upload(req,res,function(err))中可用,因此我也无法验证body数据。

  • 问题内容: 突然,这已经发生在我所有的项目中。 每当我使用express和body-parser在nodejs中发帖时,它都是一个空对象。 通过ajax和邮递员,它总是空的。 但是通过卷曲 它按预期工作。 我尝试在前者中手动设置,但随后我总是得到 这让我发疯。 我以为是人体分析器中有一些更新,但是我降级了,但没有帮助。 任何帮助表示赞赏,谢谢。 问题答案: 在可用于内容类型的3个选项的邮递员中,选

  • 我正在尝试重命名一个与multer上传的图像文件的请求参数。 下面是我的代码: 它的工作很好,但我想知道它是否存在一些更干净和更容易与multer重命名功能。 它已经尝试过这样的事情: 但它不起作用,因为req尚未填充(未定义)。 我使用httpie使用以下命令测试我的代码: 有没有可能使用multer的重命名功能来做我用FS做的事情?还是有更好的办法? 谢谢你的反馈。 托玛斯 编辑 使用Disk

  • 问题内容: 我正在使用express,无法从bodyParser获取表单数据。无论我做什么,它总是会变成一个空对象。这是我明确生成的app.js代码(我唯一添加的是底部的app.post路由): 这是我的HTML表单: 当我提交表单时,req.body是一个空对象{} 值得注意的是,即使我从表单标签中删除了enctype属性,也会发生这种情况 …我有什么地方想念/做错了吗? 我正在使用节点v0.4

  • 错误: 我试图通过这个留档https://www.npmjs.com/package/multer来处理MulterError,但遇到了一个问题。 控制台.log(req.body)给出 { },而表单 enctype 等于“多部分/表单数据”。如果我将其更改为“应用程序/ x-www-表单-网址编码”,则req.body是正常的,但文件不会上传到服务器。 穆特用法 从保修页面使用表单enctyp

  • 问题内容: 我有以下表格,提交后结果为空这是我的HTML: 这是我的(一部分): 该工作正常。我得到一个空对象。 问题答案: 您以HTML POST的身份提交,这意味着您正在使用。 这意味着您需要添加,这样express可以解析该请求并将其放入