Tag: 表示

节点和MySQL – 解决“太多连接”的问题

我有一个使用MySQL数据库在Node.js和Express上运行的应用程序。 我使用的驱动程序是node-orm2 。 我们的用户不断报告“ 太多连接 ”错误,我已经诊断出这个问题,但我不知道如何解决这个问题。 基本上发生的是,每当新用户访问该网站时,驱动程序为他们创build一个新的线程/进程 。 我可以做一个SHOW PROCESSLIST查询数据库,它会显示在那里的Time为0 。 如果用户进行另一个需要数据库的操作,那么同一个线程将被重新使用 ,并且Time会回到0 。 但是,如果他们不这样做, 线程就会保持活动状态 (使用“ Sleep Command ”), Time 。 数据库的最大连接限制为250 ,超时为7200 。 所以基本上,如果在2个小时内有超过250人使用这个网站,我们会看到“连接太多”的错误。 我尝试使用连接池 ,但这使问题变得更糟。 每当新用户使用数据库时,它就创build了10个线程,当达到7200秒超时时, 线程重新生成 。 我在这里有什么select? 我目前的方法是每半小时运行一个计划任务来closures已经打开太久的线程,但有没有更好的方法? 我正在使用以下设置: db.settings.set("properties.association_key", "{name}Id"); db.settings.set("instance.autoFetch", true); db.settings.set("instance.returnAllErrors", true); db.settings.set("instance.cache", false);

如何在NodeJS的socket.io中访问Cookie会话中间件?

我决定在我的应用程序中使用socket.io,并偶然发现了一个问题。 我使用cookie-session进行快速授权: var session = require('cookie-session'); var app = express(); // … app.use(session({ keys: ['secretkey1', 'secretkey2'] })) // … app.get('/settings', function(req, res) { res.type("html"); if (!req.session.sid) { console.log("NO SID"); req.session.sid = util.randomString(); } else { console.log("sid:" + req.session.sid); } // doing stuff with req.session.sid var jadeView = { /*…*/ }; res.status(200).send(mainJade(jadeView)); }); 现在我使用socket.io。 我想出了如何访问cookie: io.sockets.on('connection', […]

如何使用express,sequelize,mocha和supertests进行回滚unit testing

我试图做一个testing插入数据到数据库,testing一个请求与超级,然后回滚与假数据。 有人知道这种方式是正确的吗? 如果不是,请您回答并告诉我哪个方法正确? 提前致谢。 … var app = express(); var request = require('supertest'); var assert = require("assert"); var db = require('../../models'); var mysql = require('mysql'); describe('[Test controller – send_confirmation_email.js]', function () { describe('POST /crowdfunding/sendConfirmationEmail', function () { it('Second post test with data', function (done) { db.sequelize.transaction(function (t) { var cf = db.Crowdfunding.build({ money_raised: 80, project_id: […]

npm install express不提取node_module

我正在尝试安装express作为服务器端框架来处理项目,而我也使用bower作为其他前端工作。 但是,当我运行npm install express时,它显示所有的文件没有任何错误,但是当我进入目录时,什么也没有; 没有节点模块或任何可以使用的东西。 我GOOGLE了,但没有任何解决scheme。 请检查以下输出 – npm install express express@4.10.4 ../../node_modules/express +– utils-merge@1.0.0 +– merge-descriptors@0.0.2 +– fresh@0.2.4 +– cookie@0.1.2 +– escape-html@1.0.1 +– range-parser@1.0.2 +– cookie-signature@1.0.5 +– finalhandler@0.3.2 +– vary@1.0.0 +– media-typer@0.3.0 +– methods@1.1.0 +– parseurl@1.3.0 +– serve-static@1.7.1 +– content-disposition@0.5.0 +– path-to-regexp@0.1.3 +– depd@1.0.0 +– qs@2.3.3 +– on-finished@2.1.1 (ee-first@1.1.0) +– etag@1.5.1 (crc@3.2.1) +– debug@2.1.0 […]

我的error handling程序如何优先于中间件

使用express.js作为一个项目,第一次使用它比搞乱更多,并且在获得中间件的过程中遇到一些麻烦。 我的问题是,调用我的快递静态路由,宣布接近文件的顶部 app.use(express.static(__dirname + '/public')); 实际上是由error handling程序处理,几乎在文件的底部 app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); …我不确定为什么。 我知道JS并不一定是按顺序执行的,但是我的理解是express会按顺序执行这些东西, app.use底部的东西会在app.use东西后面发生 – 因此需要next(); – 传递给下一个app.use处理程序? 任何想法/智慧? 任何帮助赞赏。 我有这个代码: // Initial variable setup var express = require('express'), favicon = require('serve-favicon'), logger = require('morgan'), cookieParser = require('cookie-parser'), bodyParser = require('body-parser'), swig = require('swig'), […]

Node.js – 了解和限制内存使用情况

我正在一个实例上运行多个节点应用程序。 我关心的一个元素是内存使用情况。 是否有一个简单的Node.js快速服务所需的最小数量的物理内存? 有没有一种方法可以设置内存使用的上限,以防止我的一个节点应用程序影响其他物理内存的使用?

为什么req.params返回undefined?

我在这里检查了两个类似的问题,评论中提到的东西都没有为我工作。 app.get('/:id', function(req,res) { console.log(req.params.id); }); app.get('/:id', function(req, res) { db.query("SELECT * FROM entries WHERE id = $1", [req.params.id], function(err, dbRes) { if (!err) { res.render('show', { entry: dbRes.rows[0] }); } }); }); 正如你所看到的,我已经尝试将结果logging到控制台,看看发生了什么。 访问有问题的URL只是使页面加载,直到超时。 在控制台中,我得到“未定义”。 我如何定义req.params? 或者它的定义在哪里被拉取,为什么它不返回值? 完整的上下文: http : //pastebin.com/DhWrPvjP

是否使用快速会话回收过期的会话ID

来自ASP.NET的世界,我习惯于有一个设置,以确定是否过期的无cookie会话的会话ID是否回收或不。 Node中的快速会话需要关注吗? 我不会猜测,因为从我所知道的情况来看,即使您使用Redis进行快速会话,它仍然使用cookie来存储会话ID。 只是想确认一个比我更专业的人,这是正确的。 谢谢!

FFmpeg从video转换为audio丢失的持续时间

我试图通过他们的直接videourl(使用ytdl-core检索)加载YouTubevideo。 我使用request库加载它们。 然后我把结果输出到一个stream,用作ffmpeg的input(通过fluent-ffmpeg )。 代码看起来像这样: var getAudioStream = function(req, res) { var requestUrl = 'http://youtube.com/watch?v=' + req.params.videoId; var audioStream = new PassThrough(); var videoUrl; ytdl.getInfo(requestUrl, { downloadURL: true }, function(err, info) { res.setHeader('Content-Type', 'audio/x-wav'); res.setHeader('Accept-Ranges', 'bytes'); videoUrl = info.formats ? info.formats[0].url : ''; request(videoUrl).pipe(audioStream); ffmpeg() .input(audioStream) .outputOptions('-map_metadata 0') .format('wav') .pipe(res); }); }; 这实际上工作得很好,前端成功接收WAV格式的audio并且可以播放。 但是,audio缺less关于其大小或持续时间(以及所有其他元数据)的任何信息。 这也使得它不可见。 […]

传递一个model.find作为被调用的参数会导致错误

我一直在使用ExpressJS一段时间。 我正在学习使用mongoose。 在我的查询callback函数(错误,数据){…}我有很多重复的代码处理错误。 为此我做了一个函数checkedQuery调用查询,处理它的错误,然后将数据传递给callback。 请注意,下面的一些代码已被删除,简化,注释掉,因为它与实际问题无关。 function checkedQuery( queryFn, callback ) { queryFn( function( error, data ) { if ( error ) { // ServerErrorResponse(….); Handles sending out the proper json error response return; } callback( data ); }); } 在我的mongoose模型的其他地方,我定义了一个函数,它只是获取所有用户名的列表: UserSchema.statics.getNames = function( callback ) { var User = mongoose.model('User'); User.find({}, 'name', callback ); } […]