无服务器离线:尽管配置正确,但找不到路由”错误

问题描述 投票:0回答:1

Stack Overflow 社区您好,

我面临无服务器框架和无服务器离线插件的问题,尽管配置正确,但仍收到“找不到路由”错误。我尝试了各种故障排除步骤,但未能解决问题。我正在寻求帮助以确定可能导致此问题的原因。

背景:

我正在使用无服务器框架和 AWS Lambda 开发无服务器应用程序。我正在使用 serverless-offline 插件进行本地开发和测试。

问题:

我在 serverless.yml 配置中使用 GET 方法定义了一个端点 /dev/login,并且我尝试使用

http://localhost:3000/dev/login
访问它。但是,我一直遇到“找不到路线”错误。

相关详情:

  • 无服务器框架版本:3.34.0
  • 无服务器离线插件版本:3.34.0
  • AWS 开发工具包版本:2.x

采取的步骤:

  • 我已验证 serverless.yml 配置中的端点路径与我尝试访问的路由匹配。
  • 我已将Serverless Framework升级到3.34.0版本,以确保与serverless-offline插件的兼容性。
  • 更改配置后,我已重新启动 Serverless Offline 流程。
  • 我已清除浏览器缓存并确保使用正确的 URL (http://localhost:3000/dev/login)。
  • 我检查了 Serverless Offline 进程的控制台输出,以确认该路由已列出。

尽管做出了这些努力,问题仍然存在,并且我无法访问端点 这是我的 serverless.yml 代码。

service: lambda-invoke

plugins:
  - serverless-offline

provider:
  name: aws
  runtime: nodejs14.x
  stage: dev
  region: us-east-1

functions:
  login:
    handler: login.handler
    events:
      - http:
          path: /dev/login
          method: get
          cors: true

这是我的handler.js(登录功能代码)

const AWS = require('aws-sdk');
const jwt = require('jsonwebtoken');
const crypto = require('crypto');

const dynamoDB = new AWS.DynamoDB.DocumentClient();
const SECRET_KEY = 'your-secret-key'; // Replace with your JWT secret key
const TABLE_NAME = 'CryptoPortfolioTracker-user-harisalimughal'; // Replace with your DynamoDB table name

module.exports.login = async (event) => {
    try {
        const requestData = JSON.parse(event.body);
        const username = requestData.username;
        const password = requestData.password;

        // Retrieve user data from DynamoDB
        const params = {
            TableName: TABLE_NAME,
            Key: { username },
        };
        const userData = await dynamoDB.get(params).promise();

        if (!userData.Item) {
            return {
                statusCode: 401,
                body: JSON.stringify({ message: 'Invalid credentials' }),
            };
        }

        // Hash and compare passwords
        const hashedPassword = crypto.createHash('sha256').update(password).digest('hex');
        if (hashedPassword !== userData.Item.password) {
            return {
                statusCode: 401,
                body: JSON.stringify({ message: 'Invalid credentials' }),
            };
        }

        // Generate JWT
        const tokenPayload = { username: userData.Item.username };
        const token = jwt.sign(tokenPayload, SECRET_KEY, { algorithm: 'HS256' });

        return {
            statusCode: 200,
            body: JSON.stringify({ token }),
        };
    } catch (error) {
        console.error('Error:', error);
        return {
            statusCode: 500,
            body: JSON.stringify({ message: 'Internal server error' }),
        };
    }
};

.

aws-lambda serverless-framework aws-sdk-js serverless-offline
1个回答
0
投票

路径:/登录

dev
(舞台)已为您添加。只需将其从您的路径中删除即可

© www.soinside.com 2019 - 2024. All rights reserved.