【问题标题】:angularjs express get data back via $http postangularjs express 通过 $http post 获取数据
【发布时间】:2017-01-24 23:51:21
【问题描述】:

我是 firebase admin SDK 的新手,并尝试使用并遵循herethis here 的步骤在我的 angularjs 应用程序上运行它:

我已经正确设置了我的 firebase 管理 SDK,并在我的节点服务器上的 server.js 文件中像这样初始化它:

var admin = require("firebase-admin");

var serviceAccount = require("path/to/serviceAccountKey.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});
app.post('/.firebase-user', function (req, res, nex) {
    admin.auth().getUser(req.body.uid)
        .then(function (userRecord) {
            // See the tables below for the contents of userRecord
            console.log("Successfully fetched user data:", userRecord.toJSON());
        })
             res.status(200).send({data: userRecord.toJSON()});
             return nex();
        .catch(function (error) {
            console.log("Error fetching user data:", error);
            res.status(117);
            return nex();
        });
});


现在我想在我的控制器中访问userRecord.toJSON()

$http.post('/.firebase-user', {uid: firebase.auth().currentUser.uid})
        .then(function(response) {
            console.log($scope.data, response.userRecord);
        });


但它没有打印userRecord.toJSON(),而是在控制台中得到true undefined。 请帮助我在我的应用程序中取回信息。谢谢

【问题讨论】:

    标签: angularjs node.js express firebase firebase-admin


    【解决方案1】:

    您的 (Express) 应用请求处理程序似乎存在一些问题:

    1. 在您的 Angular 代码中,您向 /.fb 端点发出请求,但在您的服务器代码中,您是 /.firebase-user 端点上的侦听器。我假设您希望它们都相同。
    2. 您的服务器代码实际上从未向 Angular 代码发送响应。我很惊讶你的 then() 完成处理程序实际上已经完成了。您应该需要在成功的情况下显式发送​​响应,例如res.status(200).send(userRecord.toJSON()),在错误情况下使用res.status(400).send({ error: error })
    3. 您应该将catch() 添加到您的 Angular 代码中,以确保您能够捕捉到服务器代码发出的任何错误或失败的请求。

    【讨论】:

    • 你是对的,我忘了提到 res.send 部分......我的错误是没有相同的端点,这在我的代码上很好,但是当复制到 stackoverflow ,我忘了说清楚。我现在缺少的部分与角度捕捉有关。你能举个例子吗?谢谢。
    • 您的response 对象有一个data 键,而不是userRecord 键。要看到这一点,请执行 console.log(response) 以打印出整个响应。在你的 Angular 代码中,你应该使用response.data 而不是response.userRecord。那应该可以解决您的问题。至于添加catch(),只需执行类似于您在服务器代码中对catch() 所做的操作即可。
    • 我接受了您的回答,但如果您有一个很好的工作示例,我将不胜感激,以便将来的 stackoverflow 用户可以点击您的答案并将其作为模型,而不是通读 cmets ;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    相关资源
    最近更新 更多