2014-10-08 89 views
0

也许这很简单,也许这是Parse上的一个错误 - 想知道是否有人有同样的问题和可能的解决方案。在使用app.use(parseExpressRawBody())时出现奇怪

我想要做的事:

  • 我送的叫FormEntry我的解析应用
  • 应用程序JSON请求机身自带的是这样的:JSON = {“someLabel” :“someValue”}
  • 我想采取整个身体并创建一个Parse.Cloud.httpRequest到Zapier执行一些功能。

现在,这个问题似乎是这样的:

随机的场合(即我不知道为什么),身体被发送(如图中的日志),那里是一个结尾处的逗号JSON对象中最后一对的结尾。例如像这样json = {“lastLabel”:“lastValue”,} “普通”和“不正确”对象中元素的数量似乎是相同的,所以它只是添加了另一个逗号。我不知道为什么。

我的设置:

  • 使用app.use(parseExpressRawBody());而不是标准app.use(express.bodyParser());这不提供访问原始的身体。
  • 由于parseExpressRawBody将主体转换为缓冲区,我需要将其重新转换为字符串,以便以有意义的方式在HTTP请求中发送它。因此我使用:var body = req.body.toString();
  • 将此var记录到Parse控制台时,它看起来是从缓冲区罚款格式化的。

就是这样。这里没有什么复杂的,但一个真正烦人的错误,我只是没有找到一个明智的理解方式。 SUPER会赞赏以前见过这个的人,或者能指出我注意力的方向。

+0

您可以详细说明一下“称为FormEntry的应用程序”吗?如果它真的发送格式错误的JSON,那么这不是你的错。 – Bergi 2014-10-08 23:55:14

+0

感谢您的评论@Bergi该应用程序实际上被称为FormEntry,谷歌它,你会看到。我想我假设它发送的是一致的JSON,但我也将它与它们一起提出来,看看它们是否知道任何事情。我认为这可能与parseExpressRawBody有关 – 2014-10-09 08:16:45

回答

0

只是一个更新。这不是一个解决方案,它可以解释为什么JSON格式不正确,但却能够获得正确的结果。

HTTP请求的目的是指向Zapier,所以我写了一个Zapier脚本来处理格式错误的JSON。这里添加了任何需要它的人。

"use strict"; 
var Zap = { newSubmission_catch_hook: function(bundle) { 
     var body = bundle.request.content; 
     var cleanTop = body.substring(5,body.length); 
     var cleanChar = cleanTop.length; 
     var condition = cleanTop.substring(cleanChar-2,cleanChar); 
     function testCase(condition,cleanTop) { 
     if (condition != ",}"){ 
      console.log("Everything is fine, returning JSON"); 
      return cleanTop; 
     } 
     else { 
      console.log("Nope! We have an error, cleaning end"); 
     var cleanEnd = cleanTop.substr(0,cleanChar-2) + '}'; 
      console.log("The object now ends with: " + cleanEnd.substr(-10)); 
      return cleanEnd; 
     } 
     } 
    var newBody = JSON.parse(testCase(condition,cleanTop)); 

    return newBody; 
    } 
}; 
相关问题