MongoDB и Firebase не работают с функцией AWS Lambda - PullRequest
2 голосов
/ 25 марта 2019

Я создаю бот AWS Lex с использованием лямбда-функции и пытаюсь подключить его к базе данных MongoDB Atlas с помощью "mongoose" и базе данных firebase с помощью "облачного пожарного хранилища". Но данные не сохраняются в базе данных и даже нет ошибок даешь на облачные часы и там не показывается ни одна консоль

Я запускаю следующую команду для развертывания лямбда-функции на боте AWS Lex в обоих случаях: mongodb Atlas и Cloud Firestore:

$ aws лямбда-код-функции-обновления -function-name Hotel-Booking-Agent --zip-файл fileb: //index.zip

Ниже приведен код для подключения атласа mongodb с функцией лямбда

'use strict';
var mongoose = require('mongoose');
var dbURI = "mongodb+srv://author:******@cluster0-geoiq.mongodb.net/test?retryWrites=true";
mongoose.connect(dbURI, { useNewUrlParser: true })
    .catch((e) => {
        console.log("catch error: ", e)
    })
mongoose.connection.on('error', function (err) {//any error
    console.log('Mongoose connection error: ', err);
    process.exit(1);
})
mongoose.connection.on('connected', function () {//connected
    console.log("Mongoose is connected");
})

mongoose.connection.on('disconnected', function () {//disconnected
    console.log("Mongoose is disconnected");
    process.exit(1);
});
console.log("reach here")
var userSchema = new mongoose.Schema({
    "name": { type: String, required: true },
    "email": { type: String, required: true },
    "Detail": { type: String, required: true }
},
    {
        collection: "user1"
    });
exports.handler = (event, context, callback) => {

    try {
        console.log(`request received for userId=${event.userId}, intentName=${event.currentIntent.name}`);
        var slots = event.currentIntent.slots;
        var noOfPeople = slots.noOfPeople;
        var noOfRoom = slots.noOfRoom;
        var roomKind = slots.roomKind;
        var subject = slots.subject;
        var name = slots.name;
        var email = slots.email;
        switch (event.currentIntent.name) {
            case 'Hotel_Booking':
                var userModel = mongoose.model("user", userSchema);
                var newUser = new userModel({
                    "name": name,
                    "email": email,
                    'Detail': `You have booked ${noOfRoom} rooms for ${noOfPeople} people in ${roomKind} category`
                })
                 newUser.save((dataSaved) => {
                    console.log("datasaved", dataSaved)
                })
                context.succeed({
                    "dialogAction": {
                        "type": "Close",
                        "fulfillmentState": "Fulfilled",
                        "message": {
                            'contentType': 'PlainText',
                            'content': `Okay, ${name} I have book  ${noOfRoom} rooms for ${noOfPeople} people in ${roomKind} category`
                        }
                    }
                })
                break
                        default:

                context.succeed({

                    "dialogAction": {
                        "type": "Close",
                        "fulfillmentState": "Fulfilled",
                        "message": {
                            'contentType': 'PlainText',
                            'content': `Can't understand`
                        }
                    }
                })
        }
    }
    catch (err) {
        context.succeed(err);
    }
}; 

Данные должны быть сохранены в базе данных, как в коде. Также бот AWS Lex выдает ответ, как указано в функции лямбда, но в базе данных MongoDB Atlas данные не отображаются. Снимок базы данных mongodb Atlas

Вот код для подключения пожарного депо с функцией лямбда

'use strict';
var admin = require("firebase-admin");
var serviceAccount = require("./agent-e2634-firebase-adminsdk-0n8na-40c5078975.json");
admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "https://agent-e2634.firebaseio.com"
});
const db = admin.firestore();
exports.handler =  (event, context, callback) => {
    try {
        console.log(`request received for userId=${event.userId}, intentName=${event.currentIntent.name}`);
        var slots = event.currentIntent.slots;
        var noOfPeople = slots.noOfPeople;
        var noOfRoom = slots.noOfRoom;
        var roomKind = slots.roomKind;
        var subject = slots.subject;
        var name = slots.name;
        var email = slots.email;
        switch (event.currentIntent.name) {
            case 'Hotel_Booking':
                var docRef = db.collection('users').doc('info');

                var setAda = docRef.set({
                    'name': name,
                    'email': email,
                    'content': `Okay, ${name} I have book  ${noOfRoom} rooms for ${noOfPeople} people in ${roomKind} category`
                });
                db.collection('users').get()
                    .then((data) => {
                        context.succeed({
                            "dialogAction": {
                                "type": "Close",
                                "fulfillmentState": "Fulfilled",
                                "message": {
                                    'contentType': 'PlainText',
                                    'content': `Okay, ${name} I have book  ${noOfRoom} rooms for ${noOfPeople} people in ${roomKind} category`
                                }
                            }
                        })
                        console.log(doc.id, '=>', data);
                    })
                    .catch((err) => {
                        console.log('Error getting documents', err);
                    });
                break
                        default:

                context.succeed({

                    "dialogAction": {
                        "type": "Close",
                        "fulfillmentState": "Fulfilled",
                        "message": {
                            'contentType': 'PlainText',
                            'content': `Can't understand`
                        }
                    }
                })
        }
    }
    catch (err) {
        context.succeed(err);
    }
}

При развертывании вышеуказанного кода бот возвращает следующую ошибку:

Произошла ошибка: недопустимый лямбда-ответ: получен ответ об ошибке от лямбды: необработанный

тот же код работает нормально, без подключения к базе данных, и даже в облачном хранилище нет документации и документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...