Как исправить ошибку машинописного мангуста на AWS lambda? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь настроить простой вызов базы данных Mongo Atlas с использованием инфраструктуры без серверов, AWS lambda и mongoose.

В настоящее время я настраиваюсь с помощью последней команды из serverless для машинописного текста: 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 и пытаюсь проверить Iполучить следующую ошибку:

  "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)

Похоже, что это ошибка компиляции или что-то неправильно импортировано.

Я пробовал разные версии импорта или использования мангуста, но, похоже, ничего не работает.

Любая помощь будет признательна.

1 Ответ

0 голосов
/ 17 апреля 2019

По крайней мере, экспорт require ('mongoose') кажется чем-то ненужным.

Для меня работало только следование официальным рекомендациям: https://mongoosejs.com/docs/lambda.html

и использование без сервераплагин-машинопись: https://github.com/prisma/serverless-plugin-typescript

...