У меня есть чтение некоторые гиды , и поскольку я новичок и тоже довольно глуп, я до сих пор не могу найти способ на самом деле правильно локальноВызов лямбды в без сервера .
Я начал с реализации очень простой лямбда-функции, приведенной ниже:
'use strict';
const AWS = require('aws-sdk');
const Politician = require('../model/politician.js');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports.put = async (event, context, callback) => {
const requestBody = new Politician(event.body);
let response;
console.log('did we get this far?');
submit(requestBody)
.then(res => {
response = {
statusCode: 200,
body: JSON.stringify({
message: `Successfully submitted politician with name ${requestBody.name}`,
politicianId: res.id
})
}
.catch(err => {
console.log(err);
response = {
statusCode: 500,
body: JSON.stringify({
message: `Unable to submit candidate with email ${requestBody.name}`
})
}
});
});
};
const submit = politician => {
console.log('submitting politician: ' + politician.name);
return new Promise((resolve, reject) => {
if (politician) {
resolve(politician);
} else {
reject(new Error('it all went bad!'));
}
});
};
Я еще не использую DynamoDB, но хочу получитьк этому (мне просто нужно, чтобы базовый вызов сначала работал).
, а затем я настроил очень простой модульный тест Jest, который вызывает лямбда-функцию выше:
'use strict';
const fs = require('fs');
const { promisify } = require('util');
const readFile = promisify(fs.readFile);
const AWS = require('aws-sdk');
const options = {
region: 'localhost',
endpoint: 'http://localhost:8000'
};
AWS.config.update(options);
const eventStub = require('../events/graeme.richardson.json');
const { lambda } = readFile('../functions/coxon-put-politician');
describe('Service politicians: mock for successful operations', () => {
test('Replies back with a JSON response', () => {
const event = eventStub;
const context = {};
const result = lambda.put(event, context);
result
.then(data => {
expect(data).toBeFalsy();
})
.catch(e => {
expect(e).toBe('me');
});
});
});
Я пробовал различныеспособы сделать вызов const result = lambda.put(event, context);
, вызывая лямбду только с ее именем, восстанавливая объект как функцию, и множество других, но все, что я когда-либо получаю, это вариации на ошибку:
TypeError: Cannot read property 'put' of undefined
37 | const context = {};
38 |
> 39 | const result = lambda.put(event, context);
| ^
40 |
41 | result
42 | .then(data => {
at Object.put (functions-test/coxon-put-politician.test.js:39:31)
или
TypeError: lambda is not a function
37 | const context = {};
38 |
> 39 | const result = lambda(event, context);
| ^
40 |
41 | result
42 | .then(data => {
at Object.lambda (functions-test/coxon-put-politician.test.js:39:24)
Мне кажется, что я просто упускаю один бит информации, о которой не говорится в руководствах, на которые я ссылаюсь.Кто-нибудь знает, как заставить это работать?
Как я надеюсь, это очевидно, я в конечном итоге нацелился на node.js 8.1 на AWS Lambda.
спасибо