Tag: 连接

Connect.js中间件重写请求体

我有一个基于Express的Node.js应用程序。 我希望在请求传递给我的连接中间件堆栈的其余部分(特别是将所有LF字符转换为CRLF字符)之前,将传入请求中的行结束字符转换。 是否有一个现有的Connect.js中间件来重写请求体? 理想情况下,我希望能够做到以下几点: var rewriter = bodyRewriter(function(bodyString){ return bodyString.replace(/\n/g, "\r\n"); }); app.use(rewriter); 我已经浏览了这个中间件列表 ,但是找不到任何可行的东西。 有connect-modrewrite,但它似乎只适用于URL,而不是请求身体; 有连接注入器,但它只适用于响应,而不是请求。 我对Node.js非常陌生,真的很想避免为这个看似简单的任务重新发明轮子…有没有什么可以使用的?

如何在ExpressJS中使用Q的承诺?

我需要生成PDF文档。 关于pdf进入generateDoc函数的所有魔法,它们以Buffer数据作为参数返回promise。 但Express不会将数据发送到客户端,只有标题。 我究竟做错了什么? app.get('/', function(req, res) { generateDoc().then(function(data) { res.set({ 'Content-Type': 'application/pdf', 'Content-Length': data.length }); res.end(data); }); });

如何结束一个MySQL连接,而不是让它挂在NodeJS?

我想在我的节点程序中结束我的MySQL连接。 我可以成功地使用connection.end()这样的东西。 但是,当我这样做,似乎并没有运行之前的查询。 如果我看到运行之前,我的插入查询离开结束语句,然而程序然后挂起,它永远不会结束。 这是我的代码 var mysql = require('mysql'); var connection = mysql.createConnection({'…'}); connection.connect(function(err){ }); for(var a=0; a<ticker.length;a++){ if(result[i].tweetText.indexOf(ticker[a]) > -1){ for(var j=0; j<positive.length;j++){ if((result[i].tweetText.indexOf(positive[j]) > -1) && check > -1){ console.log(result[i].tweetText + "\n") plus++; console.log(ticker[a] + "plus"+plus +"\n") check = -1; connection.query("insert into….", function(err, result) { }); } } } } connection.end(); 结束成功终止连接,但所有我的插入语句不运行; 当我删除结束连接语句,我的插入语句运行,但程序挂起。

我如何超速缓慢连接中间件,而是返回节点响应?

我有一个使用Connect的节点服务器来插入一些中间件,这些中间件试图转换node-http-proxy的响应stream。 偶尔,这种转换可能会非常缓慢,在这种情况下,最好只返回一个不包含转换的响应,或者包含部分应用程序。 在我的应用程序中,我试图在转换中间件的上下文中使用setTimeout来调用next毫秒。 这通常工作,但暴露的竞争条件,如果中间件已经调用next ,然后setTimeout触发,并发生相同的错误,如下所示: Error: Can't set headers after they are sent. 最终,我发展了setTimeout ,以Error实例作为第一个参数,然后在我的中间件链中捕获该错误,并假设res.headersSent为false ,然后开始通过res.end.call(res)发送响应。 这工作,令人惊讶的是我可以设置超时几乎没有和响应会发生快得多,是完整的。 我觉得这最后一个方法是一个黑客,并不能免受相同的竞争条件,但也许似乎是更有弹性一点。 所以我想知道Node和Connect处理这种事情有什么样的惯用方法。 我该如何解决慢中间件的超时问题,并简单地返回响应stream? 目前这似乎是做我想要的,或多或less,但再次感到有点毛病。 let resTimedout = false; const timeout = setTimeout(() => { if (!resTimedout) { resTimedout = true; next(); } }, 100); getSelectors(headers, uri, (selectors) => { const resSelectors = Object.keys(selectors).map((selector) => { … }; const […]

node.js +连接404错误

我刚开始学习node.js 我有以下(服务器)示例: var app = require("express").createServer(); app.listen(80); function fail(req, res, next) { setTimeout(next, 10); } function success() { return function(req, res, next) { setTimeout(next, 10); }; } app.get("/success0", success(), function(req, res, next) { res.send("0"); }); app.get("/success1", success(), function(req, res, next) { res.send("1"); }); app.get("/fail0", fail, function(req, res, next) { res.send("0"); }); app.get("/fail1", fail, function(req, res, […]

正确的connect.js中间件的顺序?

中间件相互依赖,例如methodOverride()检查req.body.method是否覆盖HTTP方法,然而bodyParser()parsing请求主体并填充req.body。 另一个例子是cookieparsing和会话支持,我们必须首先使用()cookieParser(),然后使用session()_。 我想知道我们怎么能知道哪个中间件应该在另一个之前使用? 我想知道在某个地方是否已经存在一个有序列表(所有中间件的列表都是正确的)?

在AWS节点上,socketcluster无法连接超过1000个连接

我正在运行一个简单的socketcluster node.js服务器并从node.js websocket客户端连接到它。 通过在本地Ubuntu14.04上运行服务器,我可以连接超过10,000个客户端到服务器。 但在AWS EC2(c3-large)ubuntu14.04实例上,相同的代码仅连接less于1000个连接。 修改了etc / security / limits.conf,并在EC2实例上将“soft nofile”和“hard nofile”的限制设置为65535。 Posix的软限制build议Node.js超过1000个并发连接不起作用。 其他的sysctl参数在我的本地ubuntu和EC2实例之间差别不大。 延迟可能不是问题,因为我尝试从多台客户机连接到服务器,但连接数仍然<1000。 是否有任何可能影响性能的AWS环境variables? 来自和来自EC2的消息数量可能是一个限制? var posix = require('posix'); posix.setrlimit('nofile', {soft:10000}); var SocketCluster = require('socketcluster').SocketCluster; var numCPUs = require('os').cpus().length; var numWorkers = numCPUs; var start = Date.now(); console.log("….. Starting Server…."); process.on('uncaughtException', function (err) { console.log("***** SEVERE ERROR OCCURED!!! *****"); console.log(err); }); var […]

更新:NodeJS – connect-keycloak中间件空响应错误

我在使用带有NodeJS的connect-keycloak中间件的时候遇到了一个问题,而且使用它的人似乎只有很less的文档。 这是基于在这里find的官方文档'A Full Example': http : //keycloak.github.io/keycloak-nodejs/connect/ 使用curl进行testing时,出现了一个意外的错误,涉及到未定义的“keycloak-token”。 在我的代码或源代码中找不到任何对此的引用,也没有任何人在网上遇到同样的问题。 任何人都可以看到我做错了什么? connect-keycloak对象包含并按预期方式实例化: // app.js: // module dependencies var request = require('sync-request'); var fs = require('fs'); var restify = require('restify'); var Keycloak = require('connect-keycloak'); var session = require('express-session'); var memoryStore = new session.MemoryStore(); // Keycloak var keycloak = new Keycloak({ store: memoryStore }); 并使用中间件: var server = […]

MongoError:第一次连接时无法连接到服务器 – 仅在脱机时

尝试连接MongoClient.connect时出现此错误,但仅当我脱机时。 只要我在线,没有改变代码,甚至没有重新启动mongoDB,我的应用程序每次连接。 AssertionError:null == {MongoError:第一次连接时无法连接到服务器[localhost:27017] 我的server.js看起来像这样: // server.js var MongoClient = require('mongodb').MongoClient; var assert = require('assert'); var operations = require('./operations'); // Connection URL var url = 'mongodb://localhost:27017/myApp'; // Use connect method to connect to the Server MongoClient.connect(url, function (err, db) { assert.equal(null, err); … 如果我只是在terminal上使用> mongo ,即使离线也不会连接。 我错过了文档中的东西吗?

如何覆盖node.js express会话的会话ID(使用护照)

我正在实施一个调用我们内部authentication服务的护照策略。 内部auth服务生成会话ID,所以我需要确保连接会话使用该ID而不是默认生成的ID。 有没有办法做到这一点? 是否有可能提供我自己的钩子函数来连接产生会话ID? 我无法想象它像设置session.id或类似的东西那么简单,因为我无法控制连接实际创build会话的时间或方式。 有没有人解决了这个问题?