如何在 SoapUI 中发布表单数据以测试 multer node.js 应用程序

Posted

技术标签:

【中文标题】如何在 SoapUI 中发布表单数据以测试 multer node.js 应用程序【英文标题】:How to post form data to test multer node.js application in SoapUI 【发布时间】: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)

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

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

【问题讨论】:

【参考方案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);

以上是关于如何在 SoapUI 中发布表单数据以测试 multer node.js 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

soapui接口性能测试---- 验证性能

soapui接口性能测试---- 输出报告和统计

Maven SoapUI 插件 - 如何在 Maven 的生命周期中执行 2 个 SoapUI 测试项目

soapui中文操作手册----通过您的WSDL请求创建一个测试

如何在 SoapUI 中测试使用 JWT 的 REST 服务?

soapui里 paramtype =form 类型参数怎么传值