首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在NodeJS服务器上没有响应的多位置更新

在NodeJS服务器上没有响应的多位置更新
EN

Stack Overflow用户
提问于 2016-02-01 12:40:59
回答 1查看 22关注 0票数 0

我试图在Firebase中使用以下设置在多位置更新服务器上执行NodeJS:

代码语言:javascript
运行
复制
function getPaths(ProductMeta, AuthData, productId) {
  var qPath = Q.defer();
  var ref = new Firebase(FBURL + "/products_tags/");

  console.log("get paths")

  var syncData = {
    timestamp_update: ProductMeta.timestamp_update,
    timestamp_create: ProductMeta.timestamp_create,
    price:            ProductMeta.price,
    nb_sales:         0,    // dynamic (watch out with edit mode)
    rating_avg:       0,    // dynamic (watch out with edit mode)
    rating_count:     0,    // dynamic (watch out with edit mode)
  };

  // Create the data we want to update
  var updatedData = {};

  updatedData["urlslug/" + returnUrlSlug(ProductMeta.title + "-" + ProductMeta.tagline) + "/" + productId] = syncData;
  updatedData["categoryId/" + ProductMeta.categoryId + "/" + productId] = syncData;
  updatedData["productType/" + ProductMeta.productType + "/" + productId] = syncData;
  updatedData["categoryId_productType/" + ProductMeta.categoryId + "-" + ProductMeta.productType + "/" + productId] = syncData;
  updatedData["username/" + AuthData.github.username + "/" + productId] = syncData;
  if(AuthData.github.hasOwnProperty('displayName')) {updatedData["displayName/" + AuthData.github.displayName + "/" + productId] = syncData;}
  var tagsRaw = ProductMeta["tagsString"].split(',');
  for(var i=0; i<tagsRaw.length; i++) {
    updatedData["tag/" + tagsRaw[i].trim() + "/" + productId] = syncData;
  };

  console.log("-----------", updatedData); // works fine

  var onComplete = function(error) {
    if (error) {
      console.log("Error updating data:", error);
      qPath.reject(error)
    } else {
      console.log("success")
      qPath.resolve("UPDATE_PRODUCTS_TAGS_SUCCESS")
    }
  };
  ref.update(updatedData, onComplete);
  return qPath.promise;
};

function returnUrlSlug(title) {
  return title.replace(/\W+/g, '-').toLowerCase();
};

我使用一个自定义令牌对用户进行身份验证,该令牌可以很好地通过测试。我的规则如下:

代码语言:javascript
运行
复制
"products_tags": {
      ".read": true,
      "$method": {
        ".read": true,
        "$tag": {
          ".read": true,
          "$productId": {
            ".read": true,
            ".write": "auth !== null 
                      && (root.child('products_meta').child($productId).child('userId').val() === auth.uid
                      || root.child('products_tags').child($method).child($tag).child($productId).val() === null
                      || auth.uid == 'adminId')"
          } // productId
        } // tag
      } // method
    },

但是,当ref.update()被触发时,似乎什么都没有发生。也没有正在返回的错误消息,除非经过一段时间后超时。

有什么不管用的?

更新

我注意到,当您设置为syncData = true时,更新就会生效。但在我看来,在与本教程不一致中,syncData (updatedUser)是一个对象。

EN

回答 1

Stack Overflow用户

发布于 2016-02-01 16:25:10

问题是,我在syncData中的一个属性是undefined,意思是:解决方案就像我解释的那样工作。

指出,当您尝试调用update()时,应该立即收到一条显式的错误消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35130797

复制
相关文章

相似问题

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