无法在app.get方法中与redis连接

时间:2017-05-16 15:47:33

标签: node.js redis

我正在尝试学习redis的用例。因为每个教程都建议最好缓存数据。

我做了一个简单的演示,我试图在Web服务redis方法中与get服务器连接。

var redis = require('redis');
var client = redis.createClient();
var express = require('express')
var app = express()

var port = process.env.PORT || 8080; // <== this is must

app.get('/fetch_offers', function (req, res) {
    client.on('connect', function() {
        console.log('connected');
    });
});

app.listen(port, function () {
  console.log(port)
})

我正在尝试在https://api.sandbox.paypal.com/v1/payments/payment

这样的localhost机器上访问它

我使用console.log方法对其进行了调试,但它不会打印已连接的消息。当我在app.get...之外创建此方法时,它会在执行node app.js时打印。

我希望它能够在点击网址时建立redis连接。我不确定最好的方法是什么?任何人都可以帮助我吗?

var redis = require('redis');
var client = redis.createClient();
var express = require('express')
var app = express()

var port = process.env.PORT || 8080; // <== this is must

client.on('connect', function() {
    console.log('connected');
});

app.get('/fetch_offers', function (req, res) {

});

app.listen(port, function () {
  console.log(port)
})

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

它不会打印连接消息,因为事件在您到达端点之前会很好地触发 - 此时没有任何内容正在侦听它并且它会丢失。尝试这样的事情:

var redis = require('redis');
var client = redis.createClient();
client.on('connect', () => {
  console.log('Redis connected');
});
client.on('ready', () => {
  console.log('Redis ready');
});
client.on('error', (err) => {
  console.log('Redis error:', err.message);
});

然后在您的路线处理程序中,您可以使用ping查看您是否已连接:

app.get('/fetch_offers', function (req, res) {
  client.ping((err, data) => {
    if (err) {
      console.log('Ping error:', err);
      return;
    }
    console.log('Ping response:', data);
  });
});

如果使用promise-redis和async / await:

,会稍微容易一些
app.get('/fetch_offers', async (req, res) => {
  try {
    console.log('Ping response:', await client.ping());
  } catch (err) {
    console.log('Ping error:', err);
  }
});