繁体   English   中英

节点 JS 不允许将 JSON 返回到 JSON 字符串中

Node JS Not Allowing Returned JSON into JSON String

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我写了一个 Firebase 云 function 来让人们注册到我的 Firebase 数据库。 我已经用 POSTMAN 进行了测试,并且 function 工作正常。

我遇到的问题是我有一个 function 正在获取条带 ID,然后需要返回该值。 我希望客户 ID(我的参考中的 customer.id)到 append 和我使用用户信息创建的 JSON 字符串。

这样,当 function 完成后,它需要将所有数据写入 firebase,然后将相同的 JSON 字符串变量返回到我的应用程序。 这一切都有效,但我无法将 append 的条纹 ID 放入我的 JSON 数组并进行解析。

我一直在畏缩互联网试图找到解决方案,我相信我的语法是正确的,但它不起作用。 我知道 function 正在工作,因为 console.log 正在输出条带 ID,它只是没有被添加到正在写入 Z035489FF8D092741943E4A83241F5AF9 的 JSON 变量中。

任何可以解释我哪里出错的人都将不胜感激。 我在下面的代码中用 // 引用了我的问题点以供评论。

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 });
        });

});
2 个回复

我认为返回它不会返回任何东西,因为它是一个回调

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});
            });

    });

我想我发现了错误。 你的语法有问题

有一行代码是错误的

 //replace 
 return userObject[{ stripe_id: customer.id }];

 // for this
 return userObject.stripe_id = customer.id;

注意:尝试更好地分离您的代码。 有点难读

2 字符串末尾带有破折号不允许json_encode

我正在尝试使用substr($originalText,0,250)从字符串中提取n个字符; 第n个字符是一个破折号。 因此,当我在记事本中查看时,最后一个字符为–。 在我的编辑器Brackets中,我什至无法打开日志文件,因为它仅支持UTF-8编码。 我也无法在此字符串上运行j ...

3 JSON 响应中不允许使用字符串(本身)?

我试图了解 JSON 响应是字符串有什么不正确。 不起作用: 错误: 语法错误:JSON 中的意外标记 d 位于位置 0 这有效: 这有效: 即使这有效: 为什么一个整数本身可以工作,而一个字符串却不能? 或者render json: "downgrade"需要以不同的方 ...

4 wtforms-json:如何不允许无/空字符串值?

我正在使用Flask和wtforms-json构建一个简单的JSON API。 我有一个问题,其中即使实际上不应该将字段设置为“无”,例如: 仍然以某种方式让显式None(或null)值通过,而不是使验证失败或从表单的patch_data()一起删除字段(尽管有时None应该是有效的) ...

5 为什么在JSON标准的字符串中不允许双引号和反斜杠?

如果我在Chrome或Firebug的JavaScript控制台中运行此程序,则效果很好。 但是,如果我在Javascript控制台中运行这两行中的任何一行,则会引发错误。 RFC 4627第2.5节似乎暗示只要正确转义就允许使用\\和"字符。但是,我尝试过的2种浏览器似乎不允许 ...

6 不允许以JSON格式解析字符串,Kendo UI图表

因此,我尝试使用kendo UI创建图表,基本上是这样的: rawData接受这样的JSON值: 但是我接受一个数组,并且想要显示数组中的所有内容,因此使用循环,我使用以下代码解析了该格式的字符串,因此可以显示数组中的所有内容: 我成功复制了格式,但是我认为问题是它不会接 ...

7 方法不允许返回字符串

我有一种递归生成随机密码的方法,需要至少有一个大写字母。 我已经设置了方法,但由于某种原因它告诉我,当我已经在if语句中定义了一个return类型时,该方法必须返回String类型。 问题:如何让此错误消失或修复我的方法以使其返回密码? ...

9 PHP将Json字符串返回到JsOnObject失败

这是php返回json字符串 这是我的json字符串 我试图将我的json字符串放入JsonObject中,并放入地图中,然后使用地图获取每一行的Ticket_No值,但不幸的是失败了,如何让我将json字符串放入Jsonobject或jsonarray并循环行获取Ticket_ ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM