gpt4 book ai didi

sequelize.js - Sequelize 代码不在 AWS Lambda 内部执行

转载 作者:行者123 更新时间:2023-12-03 22:22:40 26 4
gpt4 key购买 nike

我有在 Node.js 项目中运行良好的基于​​ Sequelize 的代码。我将该代码移到 AWS Lambda 处理程序中,并使用 node-lambda 模块对其进行测试。现在 Sequelize 代码似乎被跳过了。我不确定在 Lambda 完成之前是否没有处理 promise ,或者我是否遗漏了其他东西。以下代码跳过“期间”console.log,如下面的输出所示。

var models  = require('./models');

exports.handler = function( event, context, callback ) {
console.log("Before");

var body = JSON.parse(event.body);

// Find the device ID from the devices table
models.Device.findOne({where: {device_uuid: body.device_uuid}, attributes: ['id']}).then(function(device) {
console.log("During");

// Make sure that we got a device back
if (device === null) {
console.log("Device not found - could not insert data");
return;
}
else {
console.log("Device found, inserting data - " + body.device_uuid);

//Insert the data for this device
models.Data.create({
device_id: device.id,
data: body.data
});
}
});

console.log("After");

callback(null, "{\"status\": \"success\"}");
}

产量...
Before
After
Success:
"{\"status\": \"success\"}"

关于我哪里出错的任何想法?我正在使用节点 v5.9.0。

最佳答案

我刚开始玩 apigateway/lambda 和 sequelize,但据我所知 node 和 sequelize,回调应该在“then” block 内。

昨天发现,如果你使用回调(null,successData),性能真的很差(Select top 1 上>11 秒)。必须更改标志 context.callbackWaitsForEmptyEventLoop = false,现在 api 调用需要 24 毫秒。

    //Important to improve performance! 
context.callbackWaitsForEmptyEventLoop = false

// Find the device ID from the devices table
models.Device.findOne({where: {device_uuid: body.device_uuid}, attributes: ['id']}).then(function(device) {
console.log("During");

// Make sure that we got a device back
if (device === null) {
callback(new Error("Device not found - could not insert data"))
}
else {
console.log("Device found, inserting data - " + body.device_uuid);

//Insert the data for this device
models.Data.create({
device_id: device.id,
data: body.data
})
.then(function(insertedData){
callback(null, insertedData.toJSON())
})
.catch(function(error){
callback( new Error("Error creating")
})
}
})
console.log("After")
}

关于sequelize.js - Sequelize 代码不在 AWS Lambda 内部执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39129781/

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