javascript - 调用方法时 Meteor.isClient 与 isServer

标签 javascript meteor

我正在为我使用 Meteor 构建的 iOS 和网络应用程序实现离线模式。 到目前为止,在线模式使用 API,我使用 HTTP 包保存和获取所有数据。 现在,我已经开始使用此解决方案设置本地数据库以在应用程序离线时保存数据:Link

所以现在,我可以让我的网络应用程序使用 API,让我的移动应用程序在本地保存数据,但我找不到一种好的方法来让一段代码同时适用于这两者。

这是我的代码:

1 - 我在哪里调用我的方法

Meteor.call('createDocument', myDataToSave, function( error, result)
{
   console.log(error, result);
});

2 - 我的方法:

// First option
if( Meteor.isServer){
   Meteor.methods({
     createDocument: function( myDataToSave){
        console.log('is server2');
        return HTTP.post( API_URL, {
            data: myDataToSave
        });
     }
   });
}


// Second option
Meteor.methods({
   createDocument: function(myDataToSave {
     if (Meteor.isCordova) {
        alert('is cordova');
        return Documents.insert(myDataToSave);
     } else if( Meteor.isServer){
        console.log('is server');
        return HTTP.post( API_URL, {
            data: myDataToSave
        });
    } else {
        console.log(Meteor);
    }
  }
});

所以现在我不明白的是,当我在我的网络浏览器上本地测试应用程序时,如果我使用第二个选项(注释掉第一个),我的日志中有 Meteor. isClienttrue,因为使用了最后一个 else

如果我使用第一个选项并注释掉第二个选项,一切正常,Meteor.isServertrue,因此我可以将数据保存到 API

所以我想我的问题是,如何在同一个文件中以同样的方式调用它,Meteor 返回不同的环境?它来自于在 Meteor.isServer 内部或外部声明 Metor.methods 吗?


PS:我找到了同时使用两者的解决方案,即有两种不同的方法,一种用于server,一种用于client:

if (Meteor.isCordova) {
   var method = 'createDocumentClient';
} else {
   var method = 'createDocument';
}
Meteor.call(method, myDataToSave, function( error, result)
{
   console.log(error, result);
});

但即使这个解决方案似乎有效,我仍然不知道为什么它有效而第一个选项无效,如果有人能帮助我理解正在发生的事情,我将不胜感激:)

最佳答案

假设您的代码位于根目录或 /lib 中,该方法将首先在客户端上运行,然后在服务器上运行。这样做是为了延迟补偿,在客户端上称为模拟.isServer.isClient 让您可以控制您希望代码运行的环境。

如果您将方法放在 /client 中,那么它们将仅在客户端上运行,反之亦然,如果您将它们放在 /server 中。

通过新的 ES6 导入,您可以具体控制导入到每个环境中的内容。

关于javascript - 调用方法时 Meteor.isClient 与 isServer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37800410/

相关文章:

meteor - Iron-router 如何获取查询参数?

arrays - Meteor mongo更新嵌套数组

javascript - 加速 Meteor.js 中的自动重新加载

javascript - 如何使用 jquery 和 ajax 读取、解析和显示 xml

javascript - 你有比下面的代码更聪明的算法吗

javascript - jQuery:我如何显示/隐藏这些元素?

javascript - 在 meteor 收集文档中插入值

node.js - 在 DigitalOcean 上托管多个 meteor 应用程序

javascript - 位置 4 的 JSON 中的意外标记 <

javascript - 数据局部性在 JavaScript 中重要吗?