gpt4 book ai didi

express - 使用无服务器框架(AWS Lambda/网关)、Express、Mongoose/MongoDB Atlas 的应用程序频繁超时

转载 作者:行者123 更新时间:2023-12-01 18:59:29 24 4
gpt4 key购买 nike

触发警告:初学者问题。

我使用 Express 和 Mongoose 以及 MongoDB Atlas DB 构建了一个 API。

大多数时候,它工作正常,但经常出现超时错误。这似乎是非常随机发生的,并且涉及所有路线等......准确地说,我得到:

`502 Internal server error via POSTMAN`

在无服务器仪表板中,我得到:

invocation
time invoked 1 day ago, mar 08 at 1:38pm
fatal error Function execution duration going to exceeded configured timeout limit.
cold start
duration 48.9 s
memory used na

request
endpoint /{proxy+}
method POST
status 502
message Internal server error
latency 27 ms

以及跨度和日志:

span and log in Serverless Dashboard

我使用本教程来包装我的 Express 应用程序,以使用无服务器框架部署它:https://dev.to/adnanrahic/a-crash-course-on-serverless-apis-with-express-and-mongodb-193k

无服务器.yml 文件:

service: serviceName
app: appName
org: orgName

provider:
name: aws
runtime: nodejs12.x
stage: ${env:NODE_ENV}
region: eu-central-1
environment:
NODE_ENV: ${env:NODE_ENV}
DB: ${env:DB}

functions:
app:
handler: server.run
events:
- http:
path: /
method: ANY
cors: true
- http:
path: /{proxy+}
method: ANY
cors: true

plugins:
- serverless-offline # Utiliser pour tester localement
- serverless-dotenv-plugin

server.js 文件:

const sls = require('serverless-http')
const app = require('./app')
module.exports.run = sls(app)

app.js 文件:

const express = require('express')
const cors = require('cors')
const bodyParser = require('body-parser')

const newRoutes = require('./routes/file')

const app = express()

app.use(bodyParser.json())
const helmet = require('helmet')
app.use(helmet())

app.options('*', cors())
app.use(cors({ allowedHeaders: 'Content-Type, Authorization' }))

app.use('/new-route', newRoutes)

app.use((error, req, res, next) => {
console.log(error)
const status = error.status || 500
const message = error.message
res.status(status).json({
status: status,
message: message
})
})

// Gère la connexion à la base de donnée :
require('./db')

module.exports = app

最后是 db.js 文件:

const mongoose = require('mongoose')

mongoose
.connect(
process.env.DB, {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => {
console.log('connected')
})
.catch(err => console.log(err))

据我了解,这与 Lambda 中的冷启动以及 API Gateway 处理超时的方式有关(!?)。我已经在 mongoose 文档 ( https://mongoosejs.com/docs/lambda.html ) 上阅读了这篇文章,还阅读了其他教程,但我不知道应该如何精确地使其适应我的情况。

感谢您的帮助

最佳答案

Under your provider add timeout, maximum value of timeout in lambda is 900 seconds, place it according to your execution time like 30 seconds and see what happens

provider:
timeout: 30

该错误清楚地表明它的执行超出了超时时间,因为您尚未配置超时,因此它使用默认的 3 秒超时,希望它能解决问题

关于express - 使用无服务器框架(AWS Lambda/网关)、Express、Mongoose/MongoDB Atlas 的应用程序频繁超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60588274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com