【问题标题】:How to post form data to test multer node.js application in SoapUI如何在 SoapUI 中发布表单数据以测试 multer node.js 应用程序
【发布时间】:2020-10-28 17:23:00
【问题描述】:

使用 multer npm 包的 js 应用程序。代码如下:

var multer  = require('multer')
var upload = multer({ dest: 'avatars' })

router.post('/users/me/avatar', upload.single('avatar'), (req, res) => {
    res.send()
})

我正在尝试使用 SoapUi 测试此端点。

但是,我从节点收到以下响应。

MulterError:意外字段 在 WrappedFileFilter (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\multer\index.js:40:19) 在 Busboy。 (C:\Users\pdatta\OneDrive - 美国轮胎经销商\Node\task-manager\node_modules\multer\lib\make-middleware.js:114:7) 在 Busboy.emit (events.js:311:20) 在 Busboy.emit (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\busboy\lib\main.js:38:33) 在 PartStream。 (C:\Users\pdatta\OneDrive - 美国轮胎 Distributors\Node\task-manager\node_modules\busboy\lib\types\multipart.js:213:13) 在 PartStream.emit (events.js:311:20) 在 HeaderParser。 (C:\Users\pdatta\OneDrive - 美国轮胎 Distributors\Node\task-manager\node_modules\dicer\lib\Dicer.js:51:16) 在 HeaderParser.emit (events.js:311:20) 在 HeaderParser._finish (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\dicer\lib\HeaderParser.js:68:8) 在 SBMH。 (C:\Users\pdatta\OneDrive - 美国轮胎分销商\Node\task-manager\node_modules\dicer\lib\HeaderParser.js:40:12) 在 SBMH.emit (events.js:311:20) 在 SBMH._sbmh_feed (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\streamsearch\lib\sbmh.js:95:16) 在 SBMH.push (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\streamsearch\lib\sbmh.js:56:14) 在 HeaderParser.push (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\dicer\lib\HeaderParser.js:46:19) 在 Dicer._oninfo (C:\Users\pdatta\OneDrive - American Tire Distributors\Node\task-manager\node_modules\dicer\lib\Dicer.js:197:25) 在 SBMH。 (C:\Users\pdatta\OneDrive - 美国轮胎经销商\Node\task-manager\node_modules\dicer\lib\Dicer.js:127:10)

请帮我解决这个问题。该文件未保存在目标目录中。

如果您需要任何其他信息,请告诉我

【问题讨论】:

    标签: node.js soapui multer


    【解决方案1】:

    试试这个作为中间件

    const multer  = require('multer')
    
    const dirStorage =  __dirname +'/avatas';
    
    const storageOption = multer.diskStorage({
        destination: function (req, file, cb) {
          cb(null, req.dirStorageUser);
        },
        filename: function (req, file, cb) {
          cb(null, `new_avatar.png`);
        }
    });
    
    const upload = multer({
      storage: storageOption
    }).single('upload');
    
    
    router.post('/users/me/avatar', uploadMiddleware, (req, res) => {
        res.send("");
    })
    
    
    function uploadMiddleware(req, res, next) {
    
        if (!fs.existsSync(dirStorage)) {
          fs.mkdirSync(dirStorage);
        }
    
        upload(req, res, function (err) {
          let errorMsg;
          if (err instanceof multer.MulterError) {
            errorMsg = 'Was not possible save image';
          } else if (err) {
            errorMsg = 'Something was wrong on save image';
          }
       
          if (errorMsg) {
            return res.send(errorMsg);
          }
          return res.send("success");
          //next("route");
        });
    
    }

    【讨论】:

    • 感谢您的回复。我从服务器收到了这个响应——“无法保存图像”。任何人都可以从屏幕截图中检查我的 SoapUi 请求,因为我确定我做的是否正确。谢谢
    • 对不起,伙计。将 .single('upload') 更改为 .single('avatar') 您的字段。并检查您的文件夹是否允许写入
    • 我收到此错误。我需要从某人的屏幕截图中验证我的 SoapUi 请求。 internal/validators.js:117 throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多