#typescript #mongoose #serverless-framework
#typescript #mongoose #бессерверный фреймворк
Вопрос:
Я пытаюсь настроить простой вызов базы данных Mongo Atlas с использованием бессерверной платформы, AWS lambda и mongoose.
В настоящее время я настроен с использованием последней команды из serverless для typescript: 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, но, похоже, ничего не работает.
Любая помощь будет оценена.
Ответ №1:
По крайней мере, экспорт require(‘mongoose’) кажется чем-то ненужным.
То, что сработало для меня, просто соответствовало официальным рекомендациям: https://mongoosejs.com/docs/lambda.html
и с помощью serverless-plugin-typescript: https://github.com/prisma/serverless-plugin-typescript