首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我更改为Firebase 3之后,我的Firebase队列什么也不做

在我更改为Firebase 3之后,我的Firebase队列什么也不做
EN

Stack Overflow用户
提问于 2016-05-24 06:49:12
回答 1查看 1K关注 0票数 2

几周前,我开始使用Firebase,并在我的node.js服务器代码上运行Firebase队列。客户端可以将消息推送到队列/任务中,服务器将解析它们。在Firebase更改为version 3之后,我无法复制它,尽管Firebase队列已经更新,而且似乎没有其他人出现问题。这可能只是我的代码中的一个小错误,但是几天后我还没有找到它,如果有人能为我指出它,我会很感激的。

这里有我的服务器代码。当任务被添加到队列中时,它应该打印到控制台,但它没有。最后一行的推送显示它能够连接到服务器。

代码语言:javascript
复制
var firebase = require('firebase');
var Queue = require('firebase-queue');

firebase.initializeApp({
  serviceAccount: 'serviceAccountCredentials.json',
  databaseURL: 'https://heretikchess-250ed.firebaseio.com/'
});

var ref = firebase.database().ref('queue');

var queue = new Queue(ref, function(data, progress, resolve, reject) {
  console.log('This should print whenever a task is pushed onto the queue.')
  console.log(data);
  setTimeout(function() {
  resolve();
  }, 1000);
});

ref.push('this is a push from the server');
//This push works fine, so there's no problem connecting to the server.

这是我的客户代码。推送到队列/任务是成功的。

代码语言:javascript
复制
<!doctype html>
<html lang='en'>
<head>
    <meta charset="utf-8">
    <title>Why won't my code work?</title>
    <script src="https://www.gstatic.com/firebasejs/3.0.0/firebase.js"></script>
    <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'></script>
</head>

<body>

    <div>
        <h3>Submit push to firebase</h3>
        <button id='submitbutton' class='btn btn-default' type='button'>Submit</button>
    </div>

<script>
      var config = {
        apiKey: "AIzaSyCJKI3tjnnuOIcx2rnOuSTUgncuDbbxfwg",
        authDomain: "heretikchess-250ed.firebaseapp.com",
        databaseURL: "https://heretikchess-250ed.firebaseio.com",
        storageBucket: "heretikchess-250ed.appspot.com",
      };
      firebase.initializeApp(config);

      var ref = firebase.database().ref('queue/tasks');

      //Send message to queue/tasks
    $('#submitbutton').click(function() {
        ref.push('this is a push from the client');
    })
    </script>
</body>
</html>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-24 22:45:52

这对我来说很管用:

server.js

代码语言:javascript
复制
var firebase = require('firebase');
var Queue = require('firebase-queue');

firebase.initializeApp({
  serviceAccount: 'serviceAccountCredentials.json',
  databaseURL: 'https://heretikchess-250ed.firebaseio.com/'
});

var db = firebase.database();
var ref = db.ref("queue");
var queue = new Queue(ref, function(data, progress, resolve, reject) {
  console.log('This should print whenever a task is pushed onto the queue.')
  console.log(data);
  setTimeout(function() { // NB: the record will be entirely removed when resolved
    resolve();
  }, 1000);
});

client.js

代码语言:javascript
复制
var firebase = require('firebase');
var Queue = require('firebase-queue');

firebase.initializeApp({
  serviceAccount: 'serviceAccountCredentials.json',
  databaseURL: 'https://heretikchess-250ed.firebaseio.com/'
});
var db = firebase.database();
var ref = db.ref("queue");

var task = {'userId': "Peter"};

// ref.child('tasks').push('this is a push from the client"}); 
// NB the above doesn't work because it's a string and not a structure
ref.child('tasks').push({"name": "this is a push from the client"}).then(function(){ process.exit();});

注意-你需要张贴一个结构,而不是一个值的任务。你可能会发现,如果不是

代码语言:javascript
复制
ref.push('this is a push from the client');

您可以使用

代码语言:javascript
复制
ref.push({"name": "this is a push from the client"});

此外,当您尝试执行来自网页的作业请求时,我相信您也需要对用户进行身份验证,因为应用程序初始化时,我认为不验证用户,而只是标识连接。

index.html

代码语言:javascript
复制
<!doctype html>
<html lang='en'>
<head>
    <meta charset="utf-8">
    <title>Why won't my code work?</title>
    <script src="https://www.gstatic.com/firebasejs/3.0.0/firebase.js">       
</script>
<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'>    
</script>
</head>

<body>

    <div>
        <h3>Submit push to firebase</h3>
        <button id='submitbutton' class='btn btn-default' type='button'>Submit</button>
    </div>

<script>
  var config = {
    apiKey: "AIzaSyCJKI3tjnnuOIcx2rnOuSTUgncuDbbxfwg",
    authDomain: "heretikchess-250ed.firebaseapp.com",
    databaseURL: "https://heretikchess-250ed.firebaseio.com",
    storageBucket: "heretikchess-250ed.appspot.com",
  };
  firebase.initializeApp(config);

  var ref = firebase.database().ref('queue/tasks');

  // NEED TO AUTH THE CONNECTION AS A USER

  firebase.auth().signInWithEmailAndPassword('peter@pscott.com.au', 'password').catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // ...
  }).then( function(){console.log('peter logged in')});


  //Send message to queue/tasks
$('#submitbutton').click(function() {
    ref.push({'frompeter':'this is a push from the client'});
})
</script>
</body>
</html>

注意,您还需要在auth中为/queue路径添加用户和配置访问权限。我通过firebase auth/user控制台屏幕手动添加了peter@pscott.com.au的用户名和密码。

您想要细化的初学者配置。

代码语言:javascript
复制
{
    "rules": {
        ".read": false,
        ".write": false,
        "queue": {
        ".read": true,
        ".write": true
        }
    }
}

如果像上面一样打开了auth,那么就可以使用curl测试命令行中的客户端请求:

代码语言:javascript
复制
curl -X POST -d '{"foo": "bar"}' https://heretikchess-250ed.firebaseio.com//queue/tasks.json 

如果仍然有问题,可以从shell中检查所有的库版本。

代码语言:javascript
复制
## Display node version
npm -v
##  ( mine is 3.9.0 )

npm list firebase
## mine is 3.0.2

npm list firebase-queue
## mine is 1.4.0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37406271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档