1

我想将 API 构建为无服务器 AWS Lambda 函数并使用 ClaudiaJS 作为框架。但是,当将 JSON 对象传递给 POST 路由时,我无法正确解析 request.body 的内容,因为它们是“字符串”类型而不是“对象”类型。如果这是一个 express node.js 后端,我只会使用 bodyParser,但在这种情况下我不能。任何帮助表示赞赏:)

我尝试了 JSON.parse(req.body),但无济于事。

这是 POST 路由的代码

var ApiBuilder = require('claudia-api-builder'),
api = new ApiBuilder();

module.exports = api;

api.post('/upload', (req, res) => {
  return req.body;           //I return the body for debugging purposes 
});

使用 POSTMAN (content-type:application/json) 将 JSON 对象发布到服务时

{
  "latitude": "52.514818",
  "longitude": "13.356101",
  "additionalData": "xyc"
}

它返回一个字符串而不是一个对象。因此,我不能像这样解析它:req.body.latitude 并获取纬度的值。

"----------------------------641080260577727375179249\r\nContent-Disposition: form-data; name=\"file\"; filename=\"Berlin.json\"\r\nContent-Type: application/json\r\n\r\n{\n  \"latitude\": \"52.514818\",\n  \"longitude\": \"13.356101\",\n  \"additionalData\": \"xyc\"\n}\n\r\n----------------------------641080260577727375179249--\r\n"
4

1 回答 1

0

您遇到的问题是您正在发送 API 表单数据并期望它的行为类似于 JSON。

最简单的解决方案是在 POST 正文中发送实际的 JSON,在这种情况下,您现有的代码将起作用。

否则,您只需从现有字符串中获取 JSON。

var ApiBuilder = require('claudia-api-builder'), api = new ApiBuilder();
module.exports = api;

api.post('/upload', (req, res) => {
  console.log(req.body);  // outputs the form-data as string
  var myString = req.body.substring(
    req.body.lastIndexOf("{"), 
    req.body.lastIndexOf("}")+1
  );
  var myJson = JSON.parse(myString);
  console.log(myJson) // outputs a valid JSON object
  return myObj;
});
于 2019-08-05T23:42:36.013 回答