簡體   English   中英

使用 TypeScript 實現無服務器,從純 JavaScript 轉換

[英]Serverless with TypeScript, convert from plain JavaScript

我有一段 JavaScript 代碼,我想將其轉換為 TypeScript

目前我有這兩個文件:

API_Responses.js

const Responses = {
  _200(data = {}) {
    return {
      statusCode: 200,
      body: JSON.stringify(data),
    };
  }
};

module.exports = Responses;

getData.js

const Responses = require('./API_Responses');

exports.handler = async event => {
    const response = {
      payload: event?.pathParameters || ''
    }

    return Responses._200(response);
};

用於部署該 lambda 函數的serverles.yml文件是:

functions:
  getData:
    handler: getData.handler
    events:
      - http:
          path: get-data/{ID}
          method: GET
          cors: true

我想使用ts文件並import ES6 方法。

所以我嘗試了這個改變:

API_Responses.ts

export const Responses = {
  _200(data = {}) {
    return {
      statusCode: 200,
      body: JSON.stringify(data),
    };
  }
};

getData.ts

import Responses from './API_Responses';

// But here I'm confused
const handler = async event => {
    const response = {
      payload: event?.pathParameters || ''
    }

    return Responses._200(response);
};

export default handler;

serverless.yml

functions:
  getData:
    handler: getData.handler
    events:
      - http:
          path: get-data/{ID}
          method: GET
          cors: true

通過這種方式我得到錯誤:“Runtime.ImportModuleError:錯誤:找不到模塊'getData'”,

您似乎在這兩個版本(vanilla javascript 和 typescript 版本)之間更改了serverless.yml文件。

被調用的函數的名稱仍然是“handler”,但在serverless.yml文件中你調用的是“getData”(對應於文件名)

無服務器框架是圍繞已部署的普通 JavaScript 函數構建的。 編譯后它不知道您的文件名。

如果您使用 ts-node 或手動編譯.ts文件,您可以隨時檢查生成的輸出源代碼,該代碼將被執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM