【问题标题】:accessing lambda module with nodejs module.exports使用 nodejs module.exports 访问 lambda 模块
【发布时间】:2023-03-06 20:35:01
【问题描述】:

我正在使用无服务器框架在 nodejs-typescript 中编写应用程序。我试图通过将一些通用函数导出为带有简单日志的模块来划分我的代码(以测试概念是否有效)。我有两个文件。服务警报.ts 和 MailerClass.ts。在部署我的应用程序时,我似乎经常遇到语法错误。我很沮丧。大多数教程都没有使用无服务器,只有节点。你能帮我解决这个问题吗?

service-alert.ts(被执行的函数):

import generateShortname from './MailerClass';
export const handler = async (_event, _context) => {
    generateShortname("hello");
    return;
};

Mailerclass(记录值的文件):

export const generateShortname = (value) => {
    console.log(value);
};

来自 AWS Lambda 执行的错误日志:

Response:
    {
        "errorType": "Runtime.UserCodeSyntaxError",
        "errorMessage": "SyntaxError: Unexpected identifier",
        "trace": [
             "Runtime.UserCodeSyntaxError: SyntaxError: Unexpected identifier",
             "    at _loadUserApp (/var/runtime/UserFunction.js:98:13)",
             "    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
             "    at Object.<anonymous> (/var/runtime/index.js:45:30)",
             "    at Module._compile (internal/modules/cjs/loader.js:778:30)",
             "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)",
             "    at Module.load (internal/modules/cjs/loader.js:653:32)",
             "    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)",
             "    at Function.Module._load (internal/modules/cjs/loader.js:585:3)",
             "    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)",
             "    at startup (internal/bootstrap/node.js:283:19)"
        ]
    }

【问题讨论】:

    标签: node.js typescript amazon-web-services class aws-lambda


    【解决方案1】:

    我马上想到了一些事情——你正在使用 typescript,但没有使用任何类型。虽然您的代码是 vanilla JS,但您的 import 语句是 ES6(我认为节点尚不支持)。我会尝试用香草const generateShortname = require('./MailerClass'); 替换您的import 语句(es6)。

    如果这不起作用,请在部署之前尝试编译您的打字稿。有很多无服务器框架插件可以帮助解决这个问题。我建议尝试serverless-typescript,或者如果您愿意,可以使用serverless-webpack

    【讨论】:

    • 我同意。我相信这可能与导入声明有关。我还不是很擅长打字,所以还是香草。我会尝试编译它。感谢您的输入! 〜克里斯
    • 如果有人偶然发现了这一点,我最终在第一个函数中使用了一个 sqs 队列,并编写了第二个 lambda 函数,该函数带有一个 sqs 触发器,该触发器执行一个处理函数并运行代码来记录它。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2015-06-21
    • 2018-04-24
    相关资源
    最近更新 更多