Tag: node.js

如何pipe理PhantomJS实例的“池”

我正在计划一个webservice供我自己使用内部使用一个参数,一个URL,并返回表示从该URL parsing的 DOM的HTML。 通过解决我的意思是,Web服务将首先获得该网页,然后使用PhantomJS'呈现'页面,然后返回所有的DHTML,AJAX调用等执行后产生的源。 然而,基于每个请求(我现在正在做的)启动幻影的方式太慢了。 我宁愿有一个PhantomJS实例池,总是有一个服务于我的web服务的最新调用。 以前有没有做过这方面的工作? 我宁愿将这个web服务基于其他人的工作,而不是从头开始为自己写一个池pipe理器/ http代理服务器。 更多的上下文 :我已经列出了目前为止我见过的两个类似的项目,以及为什么我避免了每个项目,结果导致这个关于pipe理一个PhantomJS实例池的问题。 jsdom – 从我看到它有很好的function来执行页面上的脚本,但它不会尝试复制浏览器的行为,所以如果我使用它作为一个通用的“DOMparsing器”,最终会成为很多额外的编码来处理各种边界情况,事件调用等。我看到的第一个例子是手动调用我使用节点设置的testing应用程序的body标签的onload()函数。 这似乎是一个深刻的兔子洞的开始。 Selenium – 它只有很多更多的移动部件,因此设置一个池来pipe理长期浏览器实例将比使用PhantomJS更复杂。 我不需要它的任何macros录制/脚本的好处。 我只是想要一个web服务,就像获取网页和parsing它的DOM一样,就好像我正在用浏览器浏览这个URL(或者如果我可以让它忽略图像等甚至更快)。

如何使用nodejs打开默认浏览器并导航到特定的URL

我正在使用Node.js写一个应用程序 我想创build的function之一是打开默认的Web浏览器,并导航到一个特定的URL。 我希望它是可移植的,以便在Windows / Mac / Linux上运行。

如何以编程方式closuresExpressJS的实例进行testing?

我想弄清楚如何closuresExpress的一个实例。 基本上,我想要.listen(port)调用的反向 – 我如何获得一个Express服务器停止监听,释放端口,并closures干净? 我知道这似乎可能是一个奇怪的查询,所以这里是上下文; 也许还有另一种方法来解决这个问题,我正在考虑错误的方式。 我正在尝试为我的socket.io/nodejs应用程序设置一个testing框架。 这是一个单页面的应用程序,所以在我的testing脚本(我使用摩卡 ,但这并不重要),我想能够启动服务器,运行testing,然后closures服务器。 我可以通过假设在testing开始之前打开服务器或者通过其中一个testing启动服务器,并且随后的每个testing都假定它已经启动,但是这真的很混乱。 我更愿意让每个testing文件都使用适当的设置启动一个服务器实例,然后在testing结束时closures这个实例。 这意味着没有奇怪的依赖运行testing,一切都是干净的。 这也意味着我可以做启动/关机testing。 那么,有关如何做到这一点的任何build议? 我曾经想过手动触发exception来使它失效,但这似乎很混乱。 我已经挖掘了快速文档和来源,但似乎无法find任何方法,将closures服务器。 在socket.io中也可能有这样的一些东西,但是由于套接字服务器只连接到了Express服务器,所以我认为这需要在快速层进行。

nodejs护照authentication令牌

我正在编写一个nodejs应用程序,我想用它作为一个web应用程序以及一个API提供程序。 一旦用户通过身份validation,我想为该用户分配一个令牌用于后续请求。 这对Web应用程序的护照很有效,因为我只是用会话中的令牌序列化和反序列化用户。 但是,在响应API请求时,不存在用于存储会话信息的Cookie。 理想情况下,护照会在会话和请求主体中查找令牌。 有什么办法来configuration护照来完成这个?

Mongoose和单个node.js项目中的多个数据库

我正在做一个包含子项目的Node.js项目。 一个子项目将有一个Mongodb数据库,Mongoose将用于包装和查询数据库。 但问题是 Mongoose不允许在单个mongoose实例中使用多个数据库,因为模型是在一个连接上构build的。 为了使用多个mongoose实例,Node.js不允许多个模块实例,因为它在require()具有caching系统。 我知道在Node.js禁用模块caching,但我认为这不是一个好的解决scheme,因为它只需要mongoose。 我试图在mongoose中使用createConnection()和openSet() ,但这不是解决scheme。 我试图深入复制mongoose实例( http://blog.imaginea.com/deep-copy-in-javascript/ )传递新的mongoose实例到子项目,但它RangeError: Maximum call stack size exceeded 。 我想知道是否有任何使用mongoose或任何解决方法为这个问题使用多个数据库? 因为我认为mongoose是相当容易和快速的。 或者其他任何模块作为build议?

如何判断是否安装了node.js

我已经做了一些search,find平常,没有太多,我无法find任何地方的“Node.js愚蠢”指南。(teehee) 所以无论如何,下到业务。 我最近安装了node.js开始制作一些应用程序,第一次遇到问题:不知道如何运行应用程序。 我所做的只是安装node.js,但找不到进一步的说明。 人们真的需要做什么? 我想看看它是否真的有效。 所以我执行了一个名为hello.js的脚本,就像这样: console.log('hello world'); 现在,这将被logging到哪里? 编辑 我通过.php脚本运行这个.js。

在生产中使用babel-node可以吗?

我一直在开发一个使用babel-node的网站,并使用babelify转换进行browserify,以支持ES6语法。 我只是想知道,我可以在生产中运行这个作为 babel-node server 而不是 node server 我还有什么其他的select在节点中运行ES6? 这里是我正在运行的构build和开始的命令 // npm run build browserify -t [babelify] client.js > public/js/bundle.js", // npm start babel-node server.js" 这是我的开发依赖 "babel": "^4.0.1", "babelify": "^5.0.3", "browserify": "^8.0.3"

如何使用Morganlogging器?

我无法login摩根。 它不会将信息logging到控制台。 该文档没有说明如何使用它。 我想看看一个variables是什么。 这是来自expressjs框架的response.js文件的代码: var logger = require("morgan"); res.render = function(view, options, fn){ options = options || {}; var self = this; var req = this.req; var app = req.app; // support callback function as second arg if ('function' == typeof options) { fn = options, options = {}; } // merge res.locals options._locals […]

优雅地退出node.js

我正在阅读优秀的在线书籍http://nodebeginner.org/并尝试简单的代码 var http = require("http"); function onRequest(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); } http.createServer(onRequest).listen(8888); 现在我不知道(我还不知道!)如何优雅地closuresnode.js,所以我只是去ctrl+z 。 现在,每次我尝试运行node server.js我收到以下错误消息。 node.js:134 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: EADDRINUSE, Address already in use at Server._doListen (net.js:1100:5) at net.js:1071:14 at Object.lookup (dns.js:153:45) at Server.listen (net.js:1065:20) at Object.<anonymous> (/Users/Bob/server.js:7:4) at […]

Eslint:如何在Node.js中禁用“意外的控制台语句”?

我使用了Sublime Text 3的eslint,并且正在编写gulpfile.js 。 /*eslint-env node*/ var gulp = require('gulp'); gulp.task('default', function(){ console.log('default task'); }); 但eslint不断显示错误:“错误:意外的控制台语句。(无控制台)” 我在这里find官方文档 ,但我仍然不知道如何禁用它。 /*eslint-env node*/ var gulp = require('gulp'); /*eslint no-console: 2*/ gulp.task('default', function(){ console.log('default task'); }); 也行不通。 我的崇高文本3插件:SublimeLinter和SublimeLinter-contrib-eslint。 **编辑**这是我的.eslintrc.js文件: module.exports = { "rules": { "no-console":0, "indent": [ 2, "tab" ], "quotes": [ 2, "single" ], "linebreak-style": [ 2, "unix" […]