Add a Get Note API

From @jayair on Mon Apr 10 2017 00:59:46 GMT+0000 (UTC)

Link to chapter - http://serverless-stack.com/chapters/add-a-get-note-api.html

Copied from original issue: https://github.com/AnomalyInnovations/serverless-stack-com/issues/24

From @willybeans on Fri May 12 2017 02:16:37 GMT+0000 (UTC)

Getting this when running the mock noteId parameter (serverless webpack invoke --function get --path event.json)

Type Error ---------------------------------------------

 Cannot read property 'handler' of undefined

From @jayair on Fri May 12 2017 17:23:03 GMT+0000 (UTC)

@willybeans can you check your serverless.yml and look for the handler property?

From @willybeans on Fri May 12 2017 19:23:45 GMT+0000 (UTC)

@jayair here is the bottom part of the file:

  get:
    # Defines an HTTP API endpoint that calls the main function in get.js
    # - path: url path is /notes/{id}
    # - method: GET request
    handler: get.main
    events:
      - http:
          path: notes/{id}
          method: get
          cors: true
          authorizer:
            arn: arn:aws:cognito-idp:us-east-2:433151866650:userpool/us-east-2_mttWckAZq 

From @fwang on Fri May 12 2017 21:26:32 GMT+0000 (UTC)

@willybeans this error means the get handler was not found in serverless.yml. Could you share the rest of your serverless.yml file?

From @willybeans on Sat May 13 2017 03:16:15 GMT+0000 (UTC)

@fwang

service: notes-app-api

plugins:
  - serverless-webpack

custom:
  webpackIncludeModules: true

provider:
  name: aws
  runtime: nodejs6.10
  stage: prod
  region: us-east-2

  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:DescribeTable
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource: "arn:aws:dynamodb:us-east-1:*:*"

  get:
    # Defines an HTTP API endpoint that calls the main function in get.js
    # - path: url path is /notes/{id}
    # - method: GET request
    handler: get.main
    events:
      - http:
          path: notes/{id}
          method: get
          cors: true
          authorizer:
            arn: arn:aws:cognito-idp:us-east-2:433151866650:userpool/us-east-2_mttWckAZq

From @jayair on Sat May 13 2017 23:19:06 GMT+0000 (UTC)

@willybeans just noticed that you are missing the functions block. Have a look at the serverless.yml from this chapter - https://github.com/AnomalyInnovations/serverless-stack-demo-api/blob/add-a-get-note-api/serverless.yml#L29.

Notice, the get block is inside the functions block.

From @Jaikant on Sun May 21 2017 08:11:59 GMT+0000 (UTC)

I had to mark the main function as ā€˜asyncā€™ to avoid the error
SyntaxError: await is a reserved word

From @jayair on Sun May 21 2017 19:05:23 GMT+0000 (UTC)

@Jaikant but isnā€™t it already? https://github.com/AnomalyInnovations/serverless-stack-demo-api/blob/add-a-get-note-api/get.js#L4

Or do you mean something else?

From @Jaikant on Mon May 22 2017 05:25:28 GMT+0000 (UTC)

I seem to have missed that, maybe while moving through the chapters. thanks :slight_smile:

From @idowolf on Mon Jun 12 2017 14:18:39 GMT+0000 (UTC)

When I run the command

serverless webpack invoke --function get --path mocks/get-event.json
Iā€™m getting

Serverless: Bundling with Webpack...
Time: 617ms
     Asset     Size  Chunks             Chunk Names
 create.js   5.8 kB       0  [emitted]  create
    get.js  5.88 kB       1  [emitted]  get
handler.js  2.28 kB       2  [emitted]  handler
Serverless: Run function get...
{ statusCode: 500,
  headers: 
   { 'Access-Control-Allow-Origin': '*',
     'Access-Control-Allow-Credentials': true },
  body: '{"status":false,"error":"Item not found."}' }

But when I ran the ā€œcreateā€ command before it went well with statusCode 200.
What could have gone wrong?

From @jayair on Mon Jun 12 2017 17:27:46 GMT+0000 (UTC)

@idowolf The get function uses the id from the note you created in the Create chapter. So make sure to replace this https://github.com/AnomalyInnovations/serverless-stack-demo-api/blob/add-a-get-note-api/mocks/get-event.json#L3 with the one you get when you run the create command.

From @yashg5 on Fri Jul 28 2017 13:04:07 GMT+0000 (UTC)

How come item not found will be status code 500. i think there has to be another way to respond with proper status codes like 400, 404

From @jayair on Fri Jul 28 2017 17:25:59 GMT+0000 (UTC)

@yashg5 Yeah we leave that to you. Itā€™s pretty straightforward, the status codes are being set here - https://github.com/AnomalyInnovations/serverless-stack-demo-api/blob/master/libs/response-lib.js#L6

From @sdooley-ebsco on Thu Nov 09 2017 14:01:19 GMT+0000 (UTC)

When runningā€¦

serverless invoke local --function get --path mocks/get-event.json

I get the following type error ā€œlambda is not a functionā€. Any thoughts on what is causing this problem?

From @jayair on Thu Nov 09 2017 18:54:38 GMT+0000 (UTC)

@sdooley-ebsco It might be because get is probably not pointing to a function? Itā€™s most likely a typo in your serverless.yml.

From @omairhamid on Sun Dec 31 2017 01:15:36 GMT+0000 (UTC)

In ā€œget.jsā€, these are the first two lines:
import * as dynamoDbLib from "./libs/dynamodb-lib";
import { success, failure } from "./libs/response-lib";

I thought I had installed my AWS CLI and other tools correctly, but when I run my /mocks/get-event.json, I get the following error:

ERROR in ./get.js
Module not found: Error: Canā€™t resolve ā€˜./libs/dynamodb-libā€™ in ā€˜/notes-app-apiā€™
@ ./get.js 68:19-49

ERROR in ./get.js
Module not found: Error: Canā€™t resolve ā€˜./libs/response-libā€™ in ā€˜/notes-app-apiā€™
@ ./get.js 72:19-49

Where should it be finding /libs/response-lib and /libs/dynamodb-lib on my macOS, so that I can update the paths in get.js accordingly?

Thank you

From @jayair on Sun Dec 31 2017 04:06:33 GMT+0000 (UTC)

@omairhamid We create both of these in the previous chapter here - https://serverless-stack.com/chapters/add-a-create-note-api.html#refactor-our-code

From @omairhamid on Sun Dec 31 2017 14:30:13 GMT+0000 (UTC)

@jayair Thank you. I have no idea how I missed that. Happy new year!

From @starkos on Thu Jan 25 2018 01:04:45 GMT+0000 (UTC)

When runningā€¦

serverless invoke local --function get --path mocks/get-event.json

I get the errorā€¦

 Unexpected token u in JSON at position 0

Which appears related to this SO question. Addingā€¦

"body": "{\"text\":\"\"}"

ā€¦to get-event.json fixed it.

2 Likes