小编Dan*_*iel的帖子

热代码推送NodeJS

我一直试图在Node.js上弄清楚这个"Hot Code Push".基本上,我的主文件(在您键入时运行node app.js)包含一些设置,配置和初始化.在那个文件中,我有一个文件观察者,使用chokidar.当我添加文件时,我只是require文件.如果文件已被更改或更新,我将删除缓存delete require.cache[path],然后重新要求它.所有这些模块都不会导出任何内容,它只适用于单个全局Storm对象.

Storm.watch = function() {
    var chokidar, directories, self = this;
    chokidar = require('chokidar');
    directories = ['server/', 'app/server', 'app/server/config', 'public'];
    clientPath = new RegExp(_.regexpEscape(path.join('app', 'client')));
    watcher = chokidar.watch(directories, {
    ignored: function(_path) {
        if (_path.match(/\./)) {
            !_path.match(/\.(js|coffee|iced|styl)$/);
        } else {
            !_path.match(/(app|config|public)/);
        }
    },
    persistent: true
    });


    watcher.on('add', function(_path){
    self.fileCreated(path.resolve(Storm.root, _path));
    //Storm.logger.log(Storm.cliColor.green("File Added: ", _path));
    //_console.info("File Updated");
    console.log(Storm.css.compile('     {name}: {file}', "" +
        "name" +
        "{" +
        "color: white;" +
        "font-weight:bold;" …
Run Code Online (Sandbox Code Playgroud)

javascript node.js livereload

6
推荐指数
1
解决办法
2223
查看次数

简单的拉消息队列

我正在努力为这项工作找到合适的工具.我已经探索了一些不同的消息队列,如Kafka,Kestrel等......我正在寻找具有PULL功能的东西.

我有一个API(分布式)将传入的消息推送到队列中.然后我会有工作人员(单独的机器)从队列中提取消息.这可以确保工作人员不会被洪水淹没,也无法处理队列的负载.

我想知道Kafka或Kestrel是否支持这种功能

queue kestrel apache-kafka

4
推荐指数
1
解决办法
1万
查看次数

JavaScript 中的动态服务定位器?

我正在尝试使用 Harmony Proxies (Node.js) 获取用 JavaScript 编写的动态服务定位器。基本上你会创建一个新容器:

 var container = new Container();
Run Code Online (Sandbox Code Playgroud)

然后,您将能够像传统服务定位器一样设置和获取值:

 container.set('FM', {});
 container.get('FM');
 container.get('FM', function(FM) {

 });
Run Code Online (Sandbox Code Playgroud)

您甚至可以拥有充当子对象的名称空间:

 container.set('FM.Object', {});
Run Code Online (Sandbox Code Playgroud)

问题出在动态别名上。

 var App = container.alias('App');
Run Code Online (Sandbox Code Playgroud)

创建别名时,它会创建一个新的代理对象,您可以在其中像传统对象一样操作它,但它是 和get()方法的别名set()

代替:

 container.get('App.Hello'); 
Run Code Online (Sandbox Code Playgroud)

使用别名,您可以使用:

 App.Hello
Run Code Online (Sandbox Code Playgroud)

问题在于深层命名空间。假设您正在尝试访问App.Hello.World.Controller,因为它一次通过代理一个命名空间,而不是一次全部通过(就像完整的命名空间一样)。我如何知道用户是否正在调用App.Hello以检索服务定位器中存储的值,或者用户是否想要继续访问更深的命名空间?你不能(根据我的尝试)。

还有什么其他方法可以实现这一目标?

App.Hello.World如果要访问更深的命名空间,则具有返回代理或存储在服务定位器中的值的语法。

  var App = container.alias('App');
  App.Controller.Home.Method.Index
  // It would go through:
  App -> Proxy
  App.Controller -> Proxy or Value?
  App.Controller.Home -> Proxy or Value?
  App.Controller.Home.Method -> Proxy or Value?
  App.Controller.Home.Method.Index -> Proxy or Value?
Run Code Online (Sandbox Code Playgroud)

现在,我已经制定了一个处理这两个选项的约定。您可以使用单数名称来检索值,使用复数名称来返回代理。这只是一个快速的“黑客”,因为它不是很有效。 …

javascript service-locator proxies node.js ecmascript-harmony

3
推荐指数
1
解决办法
2121
查看次数