Auction Service CRUD Operations
Middleware
Middleware are functions that run either before or after your Lambda handler
.
We will be using middy
, a middleware engine for AWS Lambda.
import middy from '@middy/core';
import httpJsonBodyParser from '@middy/http-json-body-parser';
import httpEventNormalizer from '@middy/http-event-normalizer';
import httpErrorHandler from '@middy/http-error-handler';
const myLambda = (event, context) => {
/* code here */
};
export const handler = middy(myLambda)
.use(httpJsonBodyParser())
.use(httpEventNormalizer())
.use(httpErrorHandler());
Common middlewares
GET Request: Scanning
If you recall, scanning get items by looking through an entire table, which is inefficient. But it's good to know how to do it using the AWS SDK.
const result = await dynamoDb.scan({ TableName: 'MY_TABLE_NAME' }).promise();
console.log(result.Items); // array of all items in table
Note: If you're adding a new GET endpoint using scan
, you'll need to update the Serverless framework in a few places:
Add a lambda function for the endpoint
Include the operation type
dynamodb:Scan
in the IAM config
GET Request: Querying by Key
Querying is more efficient as it can make use of primary partition keys when looking for items.
const result = await dynamoDb
.get({
TableName: 'MY_TABLE_NAME',
Key: { id: 'my-id' },
})
.promise();
console.log(result.Item);
Similarly, you want to update the serverless.yml
:
Include a lambda function for the new endpoint
Include operation type
dynamodb:GetItem
in the IAM config
PATCH Request: Updating
To update an item, you query by key and provide the properties you want to change. Here's the rough syntax:
const params = {
TableName: 'MY_TABLE_NAME',
Key: { id: 'MY_ID' },
// Special language for updating
UpdateExpression: 'set firstName = :firstName',
// Attributes you want to update
ExpressionAttributeValues: {
':firstName': 'Daniel',
},
// What you want to return (in this case the updated item)
ReturnValues: 'ALL_NEW',
};
const result = await dynamoDb.update(params).promise();
console.log(result.Attributes); // { firstName: "Daniel" }
Last updated