【问题标题】:How to fix mongoose typescript error on AWS lambda?如何修复 AWS lambda 上的猫鼬打字稿错误?
【发布时间】:2019-09-06 01:27:05
【问题描述】:

我正在尝试使用无服务器框架、AWS lambda 和 mongoose 设置对 Mongo Atlas 数据库的简单调用。

我目前正在使用来自无服务器的最新命令进行打字稿设置:create -t aws-nodejs-typescript

serverless.yaml

plugins:
  - serverless-webpack

provider:
  name: aws
  runtime: nodejs8.10
  region: us-east-1

tsconfig.json

  "compilerOptions": {
    "moduleResolution": "node",
    "sourceMap": true,
    "target": "es2017",
    "module": "commonjs",
    "outDir": "lib",
    "removeComments": true,
    "pretty": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true
  },
  "exclude": [
    "node_modules"
  ]
}

我有一个导入的文件来处理实际连接。

connect.ts

export const mongoose = require('mongoose')
export const Schema = mongoose.Schema

mongoose.Promise = global.Promise
let isConnected: boolean = false

export const connectToDatabase = () => {
  if (isConnected) {
    console.log('using existing database connection')
    return Promise.resolve()
  } else {
    console.log('using new database connection', { isConnected })
    return mongoose
      .connect(
        encodeURI(`${process.env.DB}`)
      )
      .then((db: any) => {
        console.log(db)
        isConnected = true
      })
  }
}

然后将其导入我的处理函数。

handler.ts


import {
  connectToDatabase,
  defaultResponseHeader,
} from '../utils/mongo-helpers'
import { user } from '../utils/users'

module.exports.hello = async (event, context) => {
  console.log('started')
  context.callbackWaitsForEmptyEventLoop = false

  console.log(user)
  connectToDatabase().then(() => {
    console.log('in connect')
    const doc = user.findOne()
    console.log(doc)
    console.log(event)

    return doc
  })
}

当我将它部署到 AWS lambda 并尝试测试时,我收到以下错误:

  "errorMessage": "Unexpected token *",
  "errorType": "SyntaxError",
  "stackTrace": [
    "SyntaxError: Unexpected token *",
    "createScript (vm.js:80:10)",
    "Object.runInThisContext (vm.js:139:10)",
    "Module._compile (module.js:616:28)",
    "Object.Module._extensions..js (module.js:663:10)",
    "Module.load (module.js:565:32)",
    "tryModuleLoad (module.js:505:12)",
    "Function.Module._load (module.js:497:3)",
    "Module.require (module.js:596:17)",
    "require (internal/module.js:11:18)"
  ]
}

连同以下日志

SyntaxError: Unexpected token *
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:616:28)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)

看起来这是编译错误或未正确导入的内容。

我尝试了不同版本的导入或需要 mongoose,但似乎没有任何效果。

任何帮助将不胜感激。

【问题讨论】:

    标签: typescript mongoose serverless-framework


    【解决方案1】:

    至少导出 require('mongoose') 似乎是不需要的。

    对我有用的只是遵循官方指南: https://mongoosejs.com/docs/lambda.html

    并使用无服务器插件打字稿: https://github.com/prisma/serverless-plugin-typescript

    【讨论】:

      猜你喜欢
      • 2016-06-14
      • 2021-03-13
      • 2020-06-21
      • 2016-02-05
      • 2020-05-11
      • 2017-04-11
      • 2016-04-01
      • 1970-01-01
      • 2021-01-05
      相关资源
      最近更新 更多