使用Serverless处理多部分/表单数据?

Mar*_*ujo 4 multipartform-data serverless-framework

如何使用无服务器框架处理多部分/表单数据?v.0.5.6

刚刚尝试了这个:

"requestTemplates": {
        "multipart/form-data": {
          "httpMethod": "$context.httpMethod",
          "body": "$input.json('$')",
          "queryParams": "$input.params().querystring",
          "headerParams": "$input.params().header",
          "headerParamNames": "$input.params().header.keySet()",
          "contentTypeValue": "$input.params().header.get('Content-Type')"
        },
        "application/json": {
          "httpMethod": "$context.httpMethod",
          "body": "$input.json('$')",
          "queryParams": "$input.params().querystring",
          "headerParams": "$input.params().header",
          "headerParamNames": "$input.params().header.keySet()",
          "contentTypeValue": "$input.params().header.get('Content-Type')"
        }
      }
Run Code Online (Sandbox Code Playgroud)

action.js:

export function respond(event, cb) {

    var form = new formidable.IncomingForm();
    form.parse(event, function(err, fields, files) {
        if (err == null) {
            var response = {
                status: "true",
                data: fields,
                error: []
            };
            return cb(null, response);
        } else {
            console.log(err);
            return cb(null, ApiErrors.errors(402, err['message'] + fields));
        }
    });



}
Run Code Online (Sandbox Code Playgroud)

但是有一个错误: errorMessage = "Cannot read property 'content-length' of undefined";

use*_*017 5

我已经通过模拟http.ClientRequest并使用诸如formidable之类的表单解析器工具来与无服务器一起工作。

我正在使用lambda-proxyAPI网关事件配置。

const Stream      = require('stream').Readable;
const Formidable  = require('formidable');

module.exports.upload = ( e, ctx, cb ) => {
    let form = new Formidable.IncomingForm();

    let stream = new Stream();
    stream.push( e.body );
    stream.push( null );

    // NOTE: You'll likely want to toLowerCase() at least 'Content-Type' header key
    stream.headers = e.headers;

    form.parse( stream, (err, fields, files) => {
        // Work with your parsed form results here.
    });
}
Run Code Online (Sandbox Code Playgroud)