Tag: node redis

使用proxyquire进行模拟的策略需要跨越多个testing文件(NodeJS)

我在几个API文件中使用Rediscaching,这意味着我有一个依赖,我需要在testing中模拟。 假设我有以下文件结构 -api – login.js * – login.spec.js – initiate.js – initiate.spec.js – user.js * – user.spec.js – routes.js – server.js 假设那些带有*的文件具有redis-connection作为依赖,我可以使用Proxyquire在相应的spec.js进行模拟。 简单。 当我运行所有testing时,问题就出现了,Mocha启动服务器。 所有这些文件将被引入我的routes.js ,并且因为Redis没有运行而失败。 我可以看到几个方法: 全球模拟proxyquire – 文档不喜欢这个。 我目前的解决方法,在每个需要redis-connection文件中,有条件地导入真实的东西或基本的模拟,如果process.env.NODE_ENV === 'test' 。 然后,如果您需要特定的行为,请将这个模拟器在相关的spec文件中更有用的模拟。 卷土重来,但似乎工作。 在每个spec文件中为每个redis-connection发生一个模拟。 听起来很糟糕的pipe理。 当Mocha最初运行服务器时也可能不起作用 有没有其他方法呢? 我觉得我的解决方法可能暂时工作,因为我不经常使用这种依赖关系,但我更喜欢一个更具可扩展性的解决scheme。 谢谢

使用集群将Socket.IO缩放到多个Node.js进程

把这个头发拉出来…有人设法将Socket.IO扩展到由Node.js的集群模块产生的多个“工作者”进程? 比方说,我有以下四个工作进程(伪): // on the server var express = require('express'); var server = express(); var socket = require('socket.io'); var io = socket.listen(server); // socket.io io.set('store', new socket.RedisStore); // set-up connections… io.sockets.on('connection', function(socket) { socket.on('join', function(rooms) { rooms.forEach(function(room) { socket.join(room); }); }); socket.on('leave', function(rooms) { rooms.forEach(function(room) { socket.leave(room); }); }); }); // Emit a message every […]

如何在Redis商店客户端的键/值对中获取关键值?

我在我的socket.io聊天应用程序的Redis存储中存储用户名/套接字ID对。 当用户断开连接时,我需要从redis存储中删除用户名/ socketID对。 我已经看到如何从一个关键的价值获得价值,但从来没有一个关键。 可能吗? 或者任何一种方式,我怎么能删除键/值对只是值。 这是我的代码 用于添加到连接上存储 socket.on('username', function (username) { client.set(username, socket.id, function (err) { console.log(username + ":" + socket.id); }); }); 对于断开连接,客户端不知道什么时候会断开连接,可能由于互联网连接丢失而发生,但是当套接字断开连接时,它总是碰到“断开连接”事件。 在这种情况下,我需要删除用户名/套接字ID对。 socket.on('disconnect', function () { // dont know the username?? client.del(username, socket.id, function (err) { if (err) console.log(err); else { socket.disconnect(); console.log(socket.id + " DISCONNECTED"); } }); });

Sails.js与护照http承载身份validation不起作用

我使用护照(本地和持证人策略)多种策略。 本地策略的login工作。 我们在login后生成一个令牌,令牌存储在redis中。 在初始login后,只要在redis中find令牌,我就想使用不带会话的承载authentication。 如果我发送正确的令牌,我可以查询redis和获取用户数据,但节点仍然发送403响应,而不是我期望的200状态码。 如果在Redis中找不到标记,则导致以下错误导致崩溃: /workspace/rs-api-sails/node_modules/redis/index.js:587 throw err; ^ Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (http.js:691:11) at ServerResponse.res.setHeader (/workspace/rs-api-sails/node_modules/sails/node_modules/express/node_modules/connect/lib/patch.js:59:22) at allFailed (/workspace/rs-api-sails/node_modules/passport/lib/passport/middleware/authenticate.js:153:13) at attempt (/workspace/rs-api-sails/node_modules/passport/lib/passport/middleware/authenticate.js:232:28) at Context.delegate.fail (/workspace/rs-api-sails/node_modules/passport/lib/passport/middleware/authenticate.js:227:9) at Context.actions.fail (/workspace/rs-api-sails/node_modules/passport/lib/passport/context/http/actions.js:35:22) at verified (/workspace/rs-api-sails/node_modules/passport-http-bearer/lib/strategy.js:125:19) at /workspace/rs-api-sails/config/bootstrap.js:40:18 at try_callback (/workspace/rs-api-sails/node_modules/redis/index.js:580:9) at RedisClient.return_reply (/workspace/rs-api-sails/node_modules/redis/index.js:670:13) 10 Dec 13:25:15 – [nodemon] app crashed – […]

Nodejs性能优化

我对性能优化并不陌生,虽然我认识到nodejs可能不是最适合初学者的友好开始,但它是目前的任务。 观察:简单的JSON API请求在没有负载的登台服务器上和在数据库中的用户数小于10个的情况下需要几百毫秒。 特别是对/ api / get_user的调用需要〜300ms 执行此代码: exports.get_user = function(req, res) { return res.json(req.user) } (注意:我们将会话存储在Redis中) 堆栈: 的NodeJS performance Redis的 蒙戈 我从哪说起呢?

在Node / Express应用程序中连接到Redis的位置

redis或connect-redis是否提供任何连接池? 我不确定在快速networking应用程序中启动连接的最佳位置。 它在server.js中吗? 或者我需要启动每个控制器上的连接,使查询redis? 谢谢!

使用Node.js将简单的表从SQL转换为Redis

对于node.js / javascript和redis,我还是比较新的,所以如果这个问题很简单,请和我一起。 假设我有一个SQL表,它包含一个名为userid(唯一,主键,自动增量),用户名(varchar)和密码(Varchar)的字段。 现在假设我想在Redis中重新创build这个表。 根据我的理解,最好为这个表使用“散列”。 因此我的node.js代码有一个创build用户的函数: function newUser(username,password) { //incr the userid client.incr("userid",redis.print); //Creating the user client.get('userid',function(err,userid){ client.hmset("users", "id",userid,"name",username,"password",password); }); } 它是否正确? 另外,我如何访问存储在他的哈希中的信息? 我尝试以下,但只能返回1行: client.hgetall('users',function(err,user){ console.log('User Name: ' + user.name +" password = "+user.password); }) 最后,我将如何join2个哈希(就像我需要join的2个表一样)? 谢谢

如何在节点redis上得到all

我尝试使用hgetall从redis获取所有值,以返回所有'Task_'*值。 码: var redis = require('redis'), client = redis.createClient(); var tasks = [ { "_id" : "t1", "creationDate" : "2015-10-02T19:39:37.181Z", "device" : "2" },{ "_id" : "t2", "creationDate" : "2015-10-02T19:39:37.181Z", "device" : "1" } ]; tasks.forEach(function(task){ client.set("task_"+task._id, JSON.stringify(task)); }) client.hgetall("task_", function(e, dt){ if(e)console.log(e); console.log(dt); }) hgetall返回null

Redis pub / sub限制

使用Redis pub / sub,是否有办法限制Redis发布的监听器的数量? http://redis.io/commands/publish 例如,使用Node.js的说法: var redis = require('redis'); var rcPub = redis.createClient(); var rcSub = redis.createClient(); rcPub.publish('channel','messageA',{limit:1}); //desired functionality/syntax 基本上,当我将messageA发送给Redis时,我想告诉Redis只将消息发布给一个监听器/订阅者。 似乎有可能,但Redis能做到这一点吗? 在Redis文档中,命令是: PUBLISH channel message 我正在寻找的是: PUBLISH channel message limit 其中limit是一个整数。 看起来合理,而且从Redis的angular度来看很容易实现。

无法在Node.js中检索Redis中的值?

我可以在Redis中存储一个键/值,但无法检索该值。 store.js var client = redis.createClient(); token ='ghg782Nm'; webhook = 'http://test.com'; //store the key/value in Redis client.set(token, webhook, function(err, reply) { if (err) { console.log(err); } }); //get the value client.get(token, function(err, value) { if (err) { console.log(err); } console.log(value); //return 'http://test.com' }); 我在这里得到正确的值,但是当我想从一个不同的文件(somewhere_else.js)得到它的值是null。 somewhere_else.js var client = redis.createClient(); token ='ghg782Nm'; //get the value client.get(token, […]