首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >502无服务器Framework -API上的网关错误

502无服务器Framework -API上的网关错误
EN

Stack Overflow用户
提问于 2022-01-17 01:39:07
回答 1查看 217关注 0票数 0

我试图用下面的代码使用无服务器框架构建一个快速rest。我有一个可以工作的POST请求方法到path /fruits,但是下面的GET请求方法会抛出一个502坏网关错误。

代码语言:javascript
复制
const serverless = require('serverless-http');
const express = require('express');
const app = express();
const AWS = require('aws-sdk');

...
const dynamoDB = new AWS.DynamoDB.DocumentClient();

app.get('/fruits/:fruitName', (req, res) => {
    const params = {
        TableName: TABLE_NAME,
        Key: {
            fruitName: req.params.fruitName,
        },
    }
    dynamoDB.get(params, (err, res) => {
        if (err) {
            console.log(error);
            res.status(400).json({ error: 'Could not get fruit' });
        }
        if (res.Item) {
            const { fruitName, biName} = res.Item;
            res.json({ fruitName, biName});
        } else {
            res.status(404).json({ error: "Fruit not found" });
        }
    })
})

...

module.exports.handler = serverless(app);

我已经设置了一个serverless.yml,如下所示

代码语言:javascript
复制
provider:
  name: aws
  runtime: nodejs12.x
  stage: dev
  region: us-west-2
  iamRoleStatements:
    - Effect: 'Allow'
      Action:
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource: 
        - { "Fn::GetAtt": ["FruitsTable", "Arn" ] }
  environment:
    TABLE_NAME: 'fruits'

resources:
  Resources:
    FruitsTable:
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        AttributeDefinitions:
          - AttributeName: fruitName
            AttributeType: S
        KeySchema:
          - AttributeName: fruitName
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
        TableName: 'fruits'
 
functions:
  app:
    handler: index.handler
    events:
      - httpApi: 'GET /fruits/{fruitName}'
      - httpApi: 'POST /fruits'

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-17 03:10:03

该问题是相同的变量命名,导致覆盖。下面的话就能解决这个问题。

代码语言:javascript
复制
app.get('/fruits/:fruitName', (req, res) => {
    const params = {
        TableName: TABLE_NAME,
        Key: {
            fruitName: req.params.fruitName,
        },
    }
    dynamoDB.get(params, (err, result) => {
        if (err) {
            console.log(error);
            res.status(400).json({ error: 'Could not get fruit' });
        }
        if (result.Item) {
            const { fruitName, biName} = result.Item;
            res.json({ fruitName, biName});
        } else {
            res.status(404).json({ error: "Fruit not found" });
        }
    })
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70735658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档