2016-11-29 110 views
0

下面我試圖用JSON格式的天氣對GET進行響應。我正在嘗試使用const來完成響應。這似乎並不奏效。我在控制檯中獲得響應和天氣,但不向客戶端返回任何內容。如何使用Lambda函數響應JSON

'use strict'; 

console.log('Loading function'); 
const doc = require('dynamodb-doc'); 
const http = require('http'); 
const dynamo = new doc.DynamoDB(); 

function get_json(url, callback) { 
    http.get(url, function(res) { 
    var body = ''; 
    res.on('data', function(chunk) { 
     body += chunk; 
    }); 

    res.on('end', function() { 
     var response = JSON.parse(body); 
     callback(response); 
     }); 
    }); 
} 

exports.handler = (event, context, callback) => { 


const done = (err, res) => callback(null, { 
    statusCode: err ? '400' : '200', 
    body: err ? err.message : JSON.stringify(res), 
    headers: { 
     'Content-Type': 'application/json', 
    }, 
}); 

switch (event.httpMethod) { 
    case 'DELETE': 
     dynamo.deleteItem(JSON.parse(event.body), done) 
     break; 
    case 'GET': 
     // dynamo.scan({ TableName: event.queryStringParameters.TableName }, done); 
     done(get_json("http://api.openweathermap.org/data/2.5/weather?q=London,uk&appid=92f14e06a6652e81a5a58bd13d152f70", callback, function (resp) { 
     callback(resp); 
     })); 
     break; 
} 

};

回答

1

get_json()不會返回任何東西,因此將它傳遞給done絕對是錯誤的做法。

看起來你需要這樣做:

get_json(
    "http://api.openweathermap.org/data/2.5/weather?q=London,uk&appid=92f14e06a6652e81a5a58bd13d152f70", 
    resp => done(null, resp) 
); 
+0

這僅僅是驚人的。非常感謝你 – scottmont