Lambda:找不到模块 './drivers/node-mongodb-native/connection'”,虽然添加了 mongoose 层

Posted

技术标签:

【中文标题】Lambda:找不到模块 \'./drivers/node-mongodb-native/connection\'”,虽然添加了 mongoose 层【英文标题】:Lambda: cannot find module './drivers/node-mongodb-native/connection'", although mongoose layer addedLambda:找不到模块 './drivers/node-mongodb-native/connection'”,虽然添加了 mongoose 层 【发布时间】:2020-01-03 15:57:24 【问题描述】:

我有一个 NestJS 应用程序,在我的处理程序文件中我导入猫鼬来创建连接:

import * as mongoose from 'mongoose';
let conn = null;
const uri = process.env.MONGO_URI;
mongoose.connection.on('connected', () => 
  // log something
);

然后,在我的处理函数中:

export const handler: Handler = async (event: any, context: Context) => 
  if (conn == null) 
    conn = await mongoose.connect(uri, 
      bufferCommands: false, // Disable mongoose buffering
      bufferMaxEntries: 0, // and MongoDB driver buffering
      useNewUrlParser: true,
    );
  
  context.callbackWaitsForEmptyEventLoop = false;

现在我已经在没有猫鼬的情况下完全部署和测试了我的应用程序,并且一切正常。

相关无服务器配置:

plugins:
  - serverless-plugin-typescript
  - serverless-plugin-optimize
  - serverless-offline
package:
  individually: true

我添加了一个 mongoose 层,在 zip 中我有一个名为“nodejs”的文件夹,其中包含 package.json 和“node_modules”文件夹,其中包含 npm 安装的所有依赖项。

我之前使用过层,以相同的方式安装没有问题。

但是,当我尝试任何端点时,我仍然在控制台上得到这个:

 "errorType": "Runtime.ImportModuleError",
    "errorMessage": "Error: Cannot find module './drivers/node-mongodb-native/connection'",
    "stack": [
        "Runtime.ImportModuleError: Error: Cannot find module './drivers/node-mongodb-native/connection'",
        "    at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
        "    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
        "    at Object.<anonymous> (/var/runtime/index.js:36:30)",
        "    at Module._compile (internal/modules/cjs/loader.js:776:30)",
        "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787: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:829:12)",
        "    at startup (internal/bootstrap/node.js:283:19)",
        "    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)"
    ]


【问题讨论】:

你用的是什么版本的猫鼬? @TimRooke ^5.6.9 但我想我发现了这个问题——它似乎是由serverless-plugin-optimize 及其转换整个项目的方式引起的,而不是由猫鼬本身引起的。如果我使用serverless-plugin-monorepo 捆绑我的应用程序,一切正常,但我的功能是 40+mb 与优化后的 2mb。 好像是这样...github.com/FidelLimited/serverless-plugin-optimize/issues/56 该线程似乎建议5.2.5 如果这是一个选项? @TimRooke 尝试过,不起作用,我现在完全排除了猫鼬并将其添加为具有所有依赖项的层。但现在我收到了与该线程优化相关/无关的其他错误。 【参考方案1】:

这是由于“serverless-plugin-optimize”的工作而发生的,我最终不得不将其删除,并简单地为我的依赖项使用 lambda 层。

【讨论】:

以上是关于Lambda:找不到模块 './drivers/node-mongodb-native/connection'”,虽然添加了 mongoose 层的主要内容,如果未能解决你的问题,请参考以下文章

aws-lambda 找不到模块

ImportModuleError aws lambda。找不到模块“./json.js”

Lambda:找不到模块 './drivers/node-mongodb-native/connection'”,虽然添加了 mongoose 层

带有 AWS Lambda 错误“找不到模块”的无服务器框架

部署到 AWS lambda 时找不到模块 ./dist/server

Claudia.js create 在 typescript 项目中找不到模块 lambda