如何在服务器上使用npm时使方法具有响应性

pedropeixoto

我需要获取流星中客户端目录中的文件列表。

到目前为止,我已经知道了:

if (Meteor.isClient) {
        Meteor.call('getFiles', function(error, result) {
            if (error) {
                throwError(error.reason);
            } else {
                console.log(result);
            }
        });
}


if (Meteor.isServer) {
    Meteor.methods({
        'getFiles': function getFiles() {
            var walk    = Meteor.npmRequire('walk');
            var files   = new Array();

            var walker  = walk.walk('/test', { followLinks: false });

            walker.on('file', function(root, stat, next) {
                files.push(root + '/' + stat.name);
                next();
            });

            walker.on('end', function() {
                console.log(files);
            });

            return files;
        }
    });
}

我可以在服务器控制台上看到文件列表,但是客户端的控制台返回一个空数组。我猜这是因为在完成walker之前调用了该方法,并且仅返回了在该方法中创建的空数组。

我的问题是,我该如何使它具有反应性?我希望每次在目录中添加或删除文件时都运行此方法。

休伯特·奥格(Hubert OG)

要实现目标,您需要做两件事。

1)使Meteor方法等待异步结果,

2)当文件结构改变时,使结果更新。

第一个是相对容易的,通常是通过Futures实现的。请参阅此MeteorPad的方法代码

Future = Npm.require('fibers/future');

Meteor.methods({
  async: function() {
    var fut = new Future();
    Meteor.setTimeout(function() {
      fut.return('Async world!');
    }, 2000);
    return fut.wait();
  },
});

对于第二个问题,事情将变得更加复杂,并且无法通过方法来实现,除非您不时手动刷新结果。

首先,文件结构更改时需要通知您的应用程序。为此,您需要一个软件包来监视文件系统,而不仅仅是遍历现有文件。chokidar是一种选择工具。

现在的问题是,当文件系统已更改且您收到事件时,该方法已在很久以前返回并被遗忘,因此您无法使用它将事件传播到客户端。您需要其他工具。我可以想到三种可能性。

  • 标准的方法是在服务器上创建一个自定义发布并进行订阅。这虽然不是最简单的解决方案,但却是最好的解决方案。请参阅文档中的示例

  • 一个简单的解决方法是将文件结构复制到Mongo数据库中的集合中,然后简单地订阅该集合。对于简单项目,这可能是最简单的选择。

  • 您也可以使用anit:method之类的程序包将事件通知客户端,尽管使用此解决方案您将无法立即获得响应性-您将需要在客户端手动管理依赖项。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在服务器上使用npm时使方法具有响应性

来自分类Dev

如何在具有https的生产服务器上使用Laravel Echo

来自分类Dev

如何在D上获取服务器响应代码?

来自分类Dev

如何在D上获取服务器响应代码?

来自分类Dev

如何在异步(服务器端)ngTable上使用具有静态值的选择过滤器

来自分类Dev

如何在具有多个服务器的同一数据库上使用骆驼JPA组件?

来自分类Dev

如何在具有预渲染初始状态的服务器上渲染React?

来自分类Dev

如何在具有开发和生产分支的服务器上配置git?

来自分类Dev

如何在服务器上查找具有特定名称的文件夹?

来自分类Dev

在使用具有临时端口的JMX服务器时,如何获取服务器端口号?

来自分类Dev

如何在具有最小依赖性的Ubuntu非桌面服务器上安装Firefox(以无头模式运行)?

来自分类Dev

如何在只有一台具有SSL的服务器上正确处理一台服务器上的多个VirtualHost?

来自分类Dev

如何在没有显示器的服务器上使用Skype Desktop API?

来自分类Dev

如何在现有服务器上安装Landscape?

来自分类Dev

如何在带有Perl的非GUI服务器上使用Tor网络

来自分类Dev

如何在私有NuGet服务器上通过dotnet恢复使用API密钥

来自分类Dev

如何在没有任何桌面的Ubuntu服务器上使用VirtualBox

来自分类Dev

在服务器上使用Smack时如何避免HeadlessException?

来自分类Dev

当服务器上的流星方法失败时,我们如何使用延迟补偿?

来自分类Dev

如何在CentOS上使用Nginx设置具有两个不同端口的两个块服务器(基于IP)?

来自分类Dev

如何在服务器上使用google maps islocationonedge?

来自分类Dev

如何在Apache Web服务器上使用geminabox

来自分类Dev

如何在远程服务器上使用GUI工具?

来自分类Dev

如何在FreeBSD服务器上使用串行终端?

来自分类Dev

如何在Ubuntu服务器上使用多个终端?

来自分类Dev

如何在 Nginx 服务器上使用 Drupal 8?

来自分类Dev

在Windows OS上使用GUI时,如何在远程Linux服务器上使用jprofiler进行配置文件?

来自分类Dev

如何在具有自己IP的远程Linux服务器上安全地停止eXist-db?

来自分类Dev

如何在具有代理访问权限的Windows服务器上安装IBM Secure Gateway客户端

Related 相关文章

  1. 1

    如何在服务器上使用npm时使方法具有响应性

  2. 2

    如何在具有https的生产服务器上使用Laravel Echo

  3. 3

    如何在D上获取服务器响应代码?

  4. 4

    如何在D上获取服务器响应代码?

  5. 5

    如何在异步(服务器端)ngTable上使用具有静态值的选择过滤器

  6. 6

    如何在具有多个服务器的同一数据库上使用骆驼JPA组件?

  7. 7

    如何在具有预渲染初始状态的服务器上渲染React?

  8. 8

    如何在具有开发和生产分支的服务器上配置git?

  9. 9

    如何在服务器上查找具有特定名称的文件夹?

  10. 10

    在使用具有临时端口的JMX服务器时,如何获取服务器端口号?

  11. 11

    如何在具有最小依赖性的Ubuntu非桌面服务器上安装Firefox(以无头模式运行)?

  12. 12

    如何在只有一台具有SSL的服务器上正确处理一台服务器上的多个VirtualHost?

  13. 13

    如何在没有显示器的服务器上使用Skype Desktop API?

  14. 14

    如何在现有服务器上安装Landscape?

  15. 15

    如何在带有Perl的非GUI服务器上使用Tor网络

  16. 16

    如何在私有NuGet服务器上通过dotnet恢复使用API密钥

  17. 17

    如何在没有任何桌面的Ubuntu服务器上使用VirtualBox

  18. 18

    在服务器上使用Smack时如何避免HeadlessException?

  19. 19

    当服务器上的流星方法失败时,我们如何使用延迟补偿?

  20. 20

    如何在CentOS上使用Nginx设置具有两个不同端口的两个块服务器(基于IP)?

  21. 21

    如何在服务器上使用google maps islocationonedge?

  22. 22

    如何在Apache Web服务器上使用geminabox

  23. 23

    如何在远程服务器上使用GUI工具?

  24. 24

    如何在FreeBSD服务器上使用串行终端?

  25. 25

    如何在Ubuntu服务器上使用多个终端?

  26. 26

    如何在 Nginx 服务器上使用 Drupal 8?

  27. 27

    在Windows OS上使用GUI时,如何在远程Linux服务器上使用jprofiler进行配置文件?

  28. 28

    如何在具有自己IP的远程Linux服务器上安全地停止eXist-db?

  29. 29

    如何在具有代理访问权限的Windows服务器上安装IBM Secure Gateway客户端

热门标签

归档