gpt4 book ai didi

javascript - Lambda NodeJS 没有插入到 MongoDB

转载 作者:行者123 更新时间:2023-11-30 19:43:45 25 4
gpt4 key购买 nike

我正在尝试编译一个使用 Mongoose 的 Lambda 函数,但数据库似乎没有任何反应?没有控制台日志等。这是我当前的代码:

index.js

const connectToDatabase = require('./db');
const Match = require('./models/Match');

exports.handler = async (event, context, callback) => {

context.callbackWaitsForEmptyEventLoop = false;

let player_1_name = 'test name';

let player_1_network = 'test network';

let match_id = 1;

connectToDatabase().then(() => {

var MyModel = new Match({
player_1_name: player_1_name,
player_1_network: player_1_network,
match_id: match_id
});

MyModel.save().then(() => {
console.log('Data saved');
}).catch(e => {
console.log(e);
});

});

});

db.js

const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
let isConnected;

module.exports = connectToDatabase = () => {
if (isConnected) {
console.log('=> using existing database connection');
return Promise.resolve();
}

console.log('=> using new database connection');
return mongoose.connect(process.env.DB, {useMongoClient: true}).then(db => {
isConnected = db.connections[0].readyState;
}).catch(e => {
console.log('Error while DB connecting');
console.log(e);
});
};

模型/Match.js

const mongoose = require('mongoose');

const MatchSchema = new mongoose.Schema({
player_1_name: {
type: String,
required: true
},
player_1_network: {
type: String,
required: true
},
player_1_matches: {
type: Number,
default: 0
},
player_1_kills: {
type: Number,
default: 0
},
player_1_last_updated: {
type: Date,
default: null
},
player_2_name: {
type: String,
default: null
},
player_2_network: {
type: String,
default: null
},
player_2_matches: {
type: Number,
default: 0
},
player_2_kills: {
type: Number,
default: 0
},
player_2_last_updated: {
type: Date,
default: null
},
match_id: {
type: Number,
required: true
},
status: {
type: Boolean
},
});

module.exports = mongoose.model('Match', MatchSchema);

在运行任何测试时,无论是通过 API 网关还是直接 Lambda 测试,日志中似乎都没有添加任何内容,我在日志中得到的只是非常少的信息。

这是我在日志中实际获得的内容的屏幕截图: enter image description here

最佳答案

注意 context.callbackWaitsForEmptyEventLoop = false; 这行。这个 false 标志意味着以下内容:只要 lambda 完成处理程序函数的执行,它就会立即终止进程,即使事件循环中还有要处理的内容。在你的情况下,你的处理函数向 mongodb 发出一个 promise 的请求,但你没有 await 这个 promise 。您只需启动它并让它在后台运行,但由于我之前提到的那个错误标志,lambda 将立即终止进程,即使它发现事件循环中有网络 I/O 需要处理。这就是为什么您甚至看不到任何日志的原因 - then 或 promise 的 catch 语句甚至都没有执行。

因此,如果您有意在后台查询 mongodb,我建议您删除该错误标记。如果您不需要在后台执行此操作,请将 await 添加到您的 mongodb 查询中。

关于javascript - Lambda NodeJS 没有插入到 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55138906/

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