Add a List All the Notes API
This article is a part of a guide to building full-stack apps with Serverless and React.
자 이번에는 사용자가 가진 모든 노트목록을 가져오는 API를 추가하겠습니다.
함수 추가하기
아래 내용을 가진 list.js
파일을 신규로 생성합니다.
import * as dynamoDbLib from "./libs/dynamodb-lib";
import { success, failure } from "./libs/response-lib";
export async function main(event, context) {
const params = {
TableName: "notes",
// 'KeyConditionExpression' 조건을 가진 쿼리를 정의합니다.
// - 'userId = :userId': 파티션 키인 'userId' 값과 같은 데이터를 반환하도록 합니다.
// 'ExpressionAttributeValues' 조건 값을 정의합니다.
// - ':userId': 'userId' 값을 사용자 인증을 완료한 Cognito Identity Pool의 인증 ID
// 를 정의합니다.
KeyConditionExpression: "userId = :userId",
ExpressionAttributeValues: {
":userId": event.requestContext.identity.cognitoIdentityId
}
};
try {
const result = await dynamoDbLib.call("query", params);
// 응답 본문에 일치하는 아이템의 목록을 반환합니다.
return success(result.Items);
} catch (e) {
return failure({ status: false });
}
}
이 파일은 DynamoDB의 query
호출 내용에 userId
값을 전달한다는 것을 제외하면 get.js
와 매우 유사합니다.
API 엔드포인트 구성하기
serverless.yml
파일을 열고 아래 내용을 추가합니다.
list:
# list.js의 메인 함수를 호출하는 HTTP API 엔드포인트를 정의합니다.
# - path: url 경로는 /notes
# - method: GET 요청
handler: list.main
events:
- http:
path: notes
method: get
cors: true
authorizer: aws_iam
이것은 GET 요청을 취하는 /notes
엔드포인트를 정의합니다.
테스트
mocks/list-event.json
파일을 생성하고 아래 내용을 추가합니다.
{
"requestContext": {
"identity": {
"cognitoIdentityId": "USER-SUB-1234"
}
}
}
그리고 이 프로젝트의 루트 디렉토리에서 함수를 실행합니다.
$ serverless invoke local --function list --path mocks/list-event.json
이에 대한 응답은 아래와 유사해야합니다.
{
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials': true
},
body: '[{"attachment":"hello.jpg","content":"hello world","createdAt":1487800950620,"noteId":"578eb840-f70f-11e6-9d1a-1359b3b22944","userId":"USER-SUB-1234"}]'
}
이 API는 단 하나의 노트 객체를 반환하는get.js
함수와 대조적으로 노트 객체의 배열을 반환합니다.
그럼 다음 API를 추가하여 노트를 업데이트하겠습니다.
For help and discussion
Comments on this chapterFor reference, here is the code we are using
Backend Source :ko/add-a-list-all-the-notes-apiIf you liked this post, please subscribe to our newsletter, give us a star on GitHub, and follow us on Twitter.