node.js - 无法将 redis 服务器与 express node js 应用程序集成

标签 node.js redis kue

我是 Node.js 的新手,我一直在尝试创建一个与 KUE 库集成的小型应用程序以进行任务排队。

当我尝试运行应用程序时,即 node app.js 我收到以下错误:

{ ReplyError: ERR wrong number of arguments for 'set' command
    at parseError (.......\node_modules\redis-parser\lib\parser.js:193:12)
    at parseType (........\node_modules\redis-parser\lib\parser.js:303:14)
  command: 'SET',
  args: [ 'promotion:lock', 'H5BCCsomeRandomString==', 'PX', 2000, 'NX' ],
  code: 'ERR' }

我确实在很多地方看到了这个错误,但它们似乎都不能解决我的问题。

这是我的app.js

var express = require('express');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var dotenv = require('dotenv');
dotenv.load();

var queue = require('./routes/queueJob');

var app = express();

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({
  secret: 'secret',
  resave: true,
  saveUninitialized: true
}));
app.use(express.static(path.join(__dirname, 'public')));

app.use('/jobs', queue);

app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: err
  });
});

app.listen(3000);

这是 routes/queuejob.js

var express = require('express');
var router = express.Router();
var kue = require('kue'),
  jobs = kue.createQueue();
var env = {};


jobs.on('ready', () => {
  console.info('Queue is ready!');
});

jobs.on('error', (err) => {
  console.error('There was an error in the main queue!');
  console.error(err);
  console.error(err.stack);
});

router.get('/addnewjob', function(req, res) {
  let callback = function() {
    console.log('Callback has been triggered');
  }
  newJob('Request Job', callback);
  res.end('Successfully added a new job');
});

function newJob(name, callback) {

  name = name || 'Default_Name';

  var job = jobs.create('new job', {
    name: name
  });

  job
    .on('complete', function() {
      console.log('Job', job.id, 'with name', job.data.name, 'is done');
      callback();
    })
    .on('failed', function() {
      console.log('Job', job.id, 'with name', job.data.name, 'has failed');
      callback();
    })

  job.save();
}

jobs.process('new job', function(job, done) {
  setTimeout(function() {
    console.log('Job Processing finished');
  }, 5000);
  done();
});

module.exports = router;

由于错误消息中没有太多内容,我不确定如何解决此问题。我真的很感激这方面的帮助。

最佳答案

A SET Redis 中的命令格式如下:

SET key value [EX seconds] [PX milliseconds] [NX|XX]

在您的错误中,您似乎正在尝试将 SET 命令与许多与格式不匹配的参数一起使用:

  command: 'SET',
  args: [ 'promotion:lock', 'H5BCCsomeRandomString==', 'PX', 2000, 'NX' ],

关于node.js - 无法将 redis 服务器与 express node js 应用程序集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49315101/

相关文章:

node.js - 有什么方法可以在 AWS Lambda 函数中存储不记名 token ?

php - 如何实现对来自 API(用 PHP 构建)的响应的缓存?

node.js - 在kue中添加新作业时,有没有办法避免重复?

javascript - 在 Express 中获取无法 POST/错误

mysql - 在函数中使用 node-mysql

javascript - 使用 sequelise.js 返回空对象的最大查询

java - 验证Redis(Jedis)的键值是否为JSON

redis - 脚本 flushall - 怎么样?

node.js - 在 Node 中运行后台任务需要什么?

javascript - Node.js 需要一个相对于包根目录的文件