Tag: node.js

在CoffeeScript中从数组中删除一个值

我有一个数组: array = […, "Hello", "World", "Again", …] 我怎么能检查“世界”是否在arrays? 然后删除它,如果存在? 并参考“世界”? 有时,也许我想匹配一个正则expression式的单词,在这种情况下,我不会知道确切的string,所以我需要一个引用匹配的string。 但在这种情况下,我确定它是“世界”,这使得它更简单。 感谢您的build议。 我发现一个很酷的方式来做到这一点: http://documentcloud.github.com/underscore

Node.js应用程序有周期性的缓慢和/或超时(不接受传入的请求)

这个问题正在破坏我的生产服务器的稳定性。 回顾一下,基本思想是我的节点服务器有时会间歇性地减速,有时会导致网关超时。 就像我从日志中可以看出的那样,有些东西阻塞了节点线程(意味着传入的请求不被接受),但是我不知道是什么原因。 问题的严重程度不一 。 有时应该是<100ms请求需要10秒钟完成; 有时他们甚至从来没有被节点服务器接受。 简而言之,就好像一些随机任务正在工作并阻塞节点线程一段时间,从而减缓(甚至阻塞)传入的请求; 我可以肯定的一件事是,需要修复的症状是“网关超时” 。 这个问题来不加警告 。 我无法将其与CPU使用率,RAM使用率,正常运行时间或任何其他相关的统计数据相关联。 我已经看到服务器处理大负载罚款,然后有一个小负载这个错误,所以它甚至不会是负载相关的。 在太平洋标准时间上午1点左右发现错误并不罕见,这是一天中最小的加载时间! 重新启动节点应用程序似乎可能会让问题消失一段时间 ,但是这并不能说明问题。 我不知道是否它可能是node.js中的错误 …不是很让人安慰,考虑到它正在杀死我的生产服务器。 我做的第一件事是确保我已经升级node.js到最新的(0.8.12),以及我所有的模块( 在这里 )。 当然,我也有很多错误捕捉器。 我没有做任何事情,比如打印出大量的控制台或写入大量的文件。 起初, 我认为这是出站HTTP请求阻塞传入的套接字,因为expression中间件甚至没有收到入站请求,但我放弃了理论,因为它看起来像节点线程本身变得繁忙 。 接下来,我使用JSHint检查了所有的代码,并逐字修改了每一个警告,包括一些意外的全局variables(忘记写“var”),但是这并没有帮助 之后,我认为也许我的记忆力已经耗尽。 但是,我通过nodetime的堆快照现在看起来相当不错(如下所述)。 仍然认为内存可能是一个问题,我看了一下垃圾收集 。 我启用了–nouse-idle-notification标志,并在不需要的时候对NULL对象做了一些代码优化。 仍然相信内存是问题,我添加了–expose-gc标志并执行了gc(); 每分钟命令。 这并没有改变任何东西,除了偶尔提出要求稍微慢一些。 在绝望的尝试,我设置“群集”模块使用2名工人,并自动重新启动,每30分钟。 但是,没有运气。 我把ulimit增加到了10,000以上,并且关注了打开的文件。 每个node.js应用似乎有<300个打开文件(或套接字),因此增加ulimit没有影响。 我一直使用nodetime来logging我的服务器,下面是它的主题: 在Amazon云上运行的CentOS 5.2(m1.large实例) 任何时候都大于5000 MB的可用内存 在任何时候小于150 MB的堆大小 CPU使用率始终低于60% 我也检查了我的MongoDB服务器,这些服务器的CPU使用率小于5%,没有任何请求花费大于100ms来完成,所以我非常怀疑这是一个瓶颈。 我用Q-promises( 见代码示例 )包装(几乎)所有的代码,当然也避免了像鼠疫这样的Sync()调用。 我试图在我的testing服务器(OSX)上复制这个问题,但运气不大。 当然,这可能只是因为生产服务器被许多人以无法预料的方式被使用,我根本无法通过压力testing来复制…

如何使用websockets连接两个node.js服务器?

这是我的问题: 我有服务器A,运行node.js和使用socket.io与客户端(networking浏览器)进行通信。 这一切都运行良好,花花公子。 然而,现在我有服务器B,也需要通过websockets连接到服务器A,我已经打了一堵墙。 我find的node.js websocket客户端都不能在服务器A上使用socket.io。 所以,我正在努力的是: .——–. .———-. .———-. | CLIENT | <–> | SERVER A | <–> | SERVER B | '——–' '———-' '———-' 客户端 – 服务器连接通过socket.io完成 现在,服务器B(运行node.js)应该通过websocket连接到服务器A(为了通过端口80)。 但… 即使在socket.io客户端模块中的示例代码不起作用…:/ // Connect to server var socket = new io.Socket('localhost', {port: 8080}); socket.connect(); // Add a connect listener socket.on('connect', function(socket) { console.log('Connected.'); }); 代码只是通过没有任何错误,几秒钟后执行结束。 […]

npm package.json操作系统特定的依赖关系

有没有办法在npm package.json文件中指定操作系统特定的依赖关系? 例如,如果用户正在运行Linux,我只想安装'dbus'( https://npmjs.org/package/dbus )作为模块的依赖项。 我将有不同的Mac和Windows的依赖。

有没有人在NodeJS中实现过wiki?

我正在寻找一个纯粹的javascript,开源的wiki实现,最好是使用NodeJS。 我在哪里可以find它?

如何在运行unit testing时抑制来自node.js应用程序的应用程序日志消息?

当使用mocha和supertest对我的node.js应用程序(基本上是一个REST后端)进行unit testing时,我只需要在屏幕上显示特定于testing的消息,但stdout也与应用程序日志消息混杂在一起。 我开始unit testing: mocha -R spec . …并得到这个输出(这是不应该的): [App] Listening on port 3000 … [App] Starting app, hooray! Project API GET /projects [App] entering "projects" module … √ should return an array of projects (317ms) 我用[App]标记了应用程序日志消息。 我真正想要的是unit testing的输出结果: Project API GET /projects √ should return an array of projects (317ms) 我怎样才能抑制散布摩卡的记者输出应用程序的console.log /警告/错误输出? 解: 按照丹科的方法,我结束了这个,解决了我的问题(使用winston进行logging): […]

在Android上运行Node.Js

所以我知道这已经被质疑了很多。 准确地说,例如在这些问题中: 在Android中运行NodeJs服务器 如何在android上运行我的node.js项目? 和 IOS / Android上的NodeJS 提出的每个选项都有一个问题: 我想在我的普通设备上运行它,所以我想避免在我的设备上安装另一个操作系统 在上个月停止了JXCore的工作,(可能因此)我无法编译它(请参阅无法安装jxcore-cordova ) 自2014年以来,NodeJs 阳极的Android端口一直没有工作,反正也没有真正保持 我提到的第二个线程中的第二个答案是Android的官方节点发布,除了链接到最新的浏览网站,我找不到任何有关如何实际使用它的信息 我也看到了这一点,但似乎设备必须连接到PC(或类似的)来运行adb shell命令,而我想作为一个单独的应用程序 从这些问题发布之后的那段时间开始,作为JXCore似乎无法使用的“最佳select” 有没有办法在Android设备上运行node.js应用程序(我的情况是一个服务器)? 如果你想知道为什么我想要这样做:我用一个Node.Js服务器创build了一个WebApp,现在我想要一个可以在本地从你的手机启动的版本,而不需要Internet连接。 这意味着服务器需要在Android手机上运行。

JavaScript中的原型OO

TL; DR: 我们是否需要原型OO中的工厂/构造器? 我们可以做一个范例转换并完全放弃它们吗? BackStory: 我最近一直在做JavaScript中的原型OO,并发现在JavaScript中执行的面向对象的99%迫使经典的OO模式。 我认为原型OO是两件事。 方法的静态原型(和静态数据)和数据绑定。 我们不需要工厂或build设者。 在JavaScript中,这些是包含函数和Object.create Object文字。 这意味着我们可以将所有东西都build模为一个静态的蓝图/原型和一个数据绑定抽象,这个抽象最好直接插入到文档样式的数据库中。 即从数据库中取出对象,并通过数据克隆原型来创build对象。 这将意味着没有构造逻辑,没有工厂,没有new 。 示例代码: 一个伪示例是: var Entity = Object.create(EventEmitter, { addComponent: { value: function _addComponent(component) { if (this[component.type] !== undefined) { this.removeComponent(this[component.type]); } _.each(_.functions(component), (function _bind(f) { component[f] = component[f].bind(this); }).bind(this)); component.bindEvents(); Object.defineProperty(this, component.type, { value: component, configurable: true }); this.emit("component:add", this, component); […]

unit testingNode.js和WebSockets(Socket.io)

任何人都可以使用WebSockets(Socket.io)为Node.js提供一个坚如磐石,简单的unit testing吗? 我为Node.js使用socket.io,并且在testing中查看了socket.io-clientbuild立到服务器的客户端连接。 但是,我似乎失去了一些东西。 在下面的例子中,“工作…”永远不会被打印出来。 var io = require('socket.io-client') , assert = require('assert') , expect = require('expect.js'); describe('Suite of unit tests', function() { describe('First (hopefully useful) test', function() { var socket = io.connect('http://localhost:3001'); socket.on('connect', function(done) { console.log('worked…'); done(); }); it('Doing some things with indexOf()', function() { expect([1, 2, 3].indexOf(5)).to.be.equal(-1); expect([1, 2, 3].indexOf(0)).to.be.equal(-1); }); }); }); […]

我怎样才能使用快递的webpack?

当我尝试使用一个简单的快递服务器的webpack时,我总是得到吨的错误: express.js 'use strict'; var express = require('express'); var path = require('path'); var url = require('url'); // ——– my proxy———————- var app = express(); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.set('port', process.env.PORT || 8080); app.use(function logErrors(err, req, res, next) { console.error(err.stack); next(err); } ); app.listen(app.get('port'), function() { console.info('Express server started at http://localhost:' + app.get('port')); }); […]