Узел JS не разрешает возвращать JSON в строку JSON - PullRequest
0 голосов
/ 19 сентября 2019

Я написал облачную функцию Firebase, чтобы регистрировать людей в моей базе данных Firebase.Я проверил с POSTMAN, и функция работает правильно.

Проблема, с которой я столкнулся, заключается в том, что у меня есть функция, которая получает идентификатор полосы, а затем должна вернуть это значение.Я хочу, чтобы идентификатор клиента (customer.id в моей ссылке) добавлял созданную мной строку JSON с информацией о пользователях.

Таким образом, когда функция выполнена, ей нужно записать все данные в firebase изатем верните ту же строковую переменную JSON в мое приложение.Это все работает, но я не могу заставить Stripe ID добавляться в мой массив JSON и анализироваться.

Я пытался найти решение в Интернете, и я считаю, что мой синтаксис правильный, но он не работает.Я знаю, что функция работает, потому что console.log выводит идентификатор полосы, и он просто не добавляется в переменную JSON, которая записывается в Firebase.

Любой, кто мог бы объяснить, где я ошибаюсь, будеточень признателен.Я указал на свои проблемные пункты в коде ниже с помощью // для комментариев.

exports.myCloudFunction=
functions.https.onRequest((req, res) => {
    if (req.method !== 'POST') {
        return;
    }
    const userDataInput = req.body;
    console.log('Console Body:', req.body);

    admin.auth().createUser({
        email: userDataInput.email,
        emailVerified: false,
        phoneNumber: userDataInput.mobile,
        password: userDataInput.password,
        displayName: userDataInput.firstname + ' ' + userDataInput.lastname,
        disabled: false
    })
        .then(async function (userRecord) {
            console.log('User record:', userRecord);

            var userObject =  //CONSTRUCTED JSON STRING
            {
                first_name: userDataInput.firstname,
                last_name: userDataInput.lastname,
                mobile_number: userDataInput.mobile,
                email: userDataInput.email,
                timestamp: admin.database.ServerValue.TIMESTAMP,
                driver_profile: { isDriverApproved: false, isDriverDisabled: false, isDriverStatusPending: false, isDriver: false, isPickupModeEnabled: false },
            }
            stripe.customers.create({
                description: 'Firebase ID: ' + userRecord.uid,
                email: userRecord.email,
                name: userRecord.displayName,
                phone: userRecord.phoneNumber

            }, async function (err, customer) {
                console.log('New Stripe ID Created', customer.id); // THIS WORKS< THE customer.id is outputting
                try {
                    return userObject[{ stripe_id: customer.id }];  // THIS IS NOT WORKING, I WANT **customer.id** TO BE PUT INTO THE **userObject** JSON variable.
                }
                catch (error) {
                    console.error(error);
                    return res.status(200).send('Error: ' + error);
                }

            });

            try {
                await admin.database().ref('users/' + userRecord.uid).set(userObject);
                return res.status(200).send({ returnData: userObject });
            }
            catch (error) {
                console.error(error);
                return res.status(200).send('Error: ' + error);
            }

        })
        .catch(function (error) {
            console.log('Error creating new user:', error);
            res.status(500).send({ returnError: error });
        });

});

1 Ответ

0 голосов
/ 19 сентября 2019

Я думаю, что возвращение не даст ничего, потому что это обратный вызов

exports.myCloudFunction =
    functions.https.onRequest((req, res) => {
        if (req.method !== 'POST') {
            return;
        }
        const userDataInput = req.body;
        console.log('Console Body:', req.body);

        admin.auth().createUser({
            email: userDataInput.email,
            emailVerified: false,
            phoneNumber: userDataInput.mobile,
            password: userDataInput.password,
            displayName: userDataInput.firstname + ' ' + userDataInput.lastname,
            disabled: false
        })
            .then(async function (userRecord) {
                console.log('User record:', userRecord);

                var userObject =  //CONSTRUCTED JSON STRING
                    {
                        first_name: userDataInput.firstname,
                        last_name: userDataInput.lastname,
                        mobile_number: userDataInput.mobile,
                        email: userDataInput.email,
                        timestamp: admin.database.ServerValue.TIMESTAMP,
                        driver_profile: {
                            isDriverApproved: false,
                            isDriverDisabled: false,
                            isDriverStatusPending: false,
                            isDriver: false,
                            isPickupModeEnabled: false
                        },
                    }
                stripe.customers.create({
                    description: 'Firebase ID: ' + userRecord.uid,
                    email: userRecord.email,
                    name: userRecord.displayName,
                    phone: userRecord.phoneNumber

                }, async function (err, customer) {
                    console.log('New Stripe ID Created', customer.id); // THIS WORKS< THE customer.id is outputting
                    try {
                        // Move your logic to the final callback
                        userObject["stripe_id"] = customer.id;

                        await admin.database().ref('users/' + userRecord.uid).set(userObject);

                        return res.status(200).send({returnData: userObject});
                    } catch (error) {
                        console.error(error);
                        return res.status(200).send('Error: ' + error);
                    }

                });

            })
            .catch(function (error) {
                console.log('Error creating new user:', error);
                res.status(500).send({returnError: error});
            });

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