简体   繁体   中英

Express REST API not returning integer array

I'm using Express for the first time, and I'm running into an issue. I'm trying to modify this tutorial and for my purposes, but I'm using Redis instead of MongoDB.

Here's my code:

redisSource.js:

var redis = require ("node-redis");

RedisSource = function () {
        this.r_client = redis.createClient();

        this.getParents = function (circuit_id, cb) {
                this.r_client.smembers('circuit.parents_of:' + circuit_id, function(err, reply){
                        console.log("Reply: " + reply);
                        cb(err, reply);
                });
        }
}

exports.RedisSource = RedisSource;

fetch.js:

Fetch = function(app) {
        var RedisSource = require ('./redisSource').RedisSource;
        var redisSource = new RedisSource();

        app.get('/parents/:id', function(req, res) {
                redisSource.getParents(req.params.id, function (error, parents) {
                        console.log ("Response in Fetch main: " + parents);
                        res.send(parents);
                });
        });

        app.get('/test', function (req, res) {
                res.send('Hello, world!');
        });
};

exports.Fetch = Fetch;

app.js:

/**
 * Module dependencies.
 */

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

var Fetch = require('./fetch').Fetch;
var FetchService = new Fetch(app);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

When I run the application, I get the following:

GET http://ironsides.zayo.com:3000/test
> Hello, world!

Which is what I expect. But when I try the other call:

GET http://ironsides.zayo.com:3000/parents/12115
> [ [ 49, 53, 50, 55, 51 ], [ 49, 53, 50, 56, 56 ], [ 49, 53, 51, 48, 56 ], [ 49, 53, 51, 48, 57 ], [ 49, 53, 51, 49, 48 ], [ 49, 53, 51, 49, 49 ], [ 49, 53, 51, 50, 56 ], [ 49, 53, 51, 50, 57 ], [ 49, 53, 51, 51, 48 ], [ 49, 53, 51, 52, 49 ], [ 51, 51, 50, 54, 51 ] ]

On the console, I get this:

GET /parents/12115 200 74ms - 530b
Reply: 15273,15288,15308,15309,15310,15311,15328,15329,15330,15341,33263
Response in Fetch main: 15273,15288,15308,15309,15310,15311,15328,15329,15330,15341,33263

I'm expecting an array of the integers that I'm seeing on the console. Instead, I'm getting an array of arrays of the ascii character codes for those integers. I'm really confused. I'm sure I'm missing something simple.

怎么样:

res.send(parents.toString());

Between max's comments, and this thread , I figured it out. The 'node-redis' module returns buffers, not strings. If I rewrite the statement:

console.log ("Response in Fetch main: " + parents);

as

console.log (parents);

Then it comes back as an array of buffers. So I rewrote redisSource.getParents() like this:

    this.getParents = function (circuit_id, cb) {
            this.r_client.smembers('circuit.parents_of:' + circuit_id, function(err, reply){
                    console.log("Reply: " + reply);
                    var string_reply = reply.map(function(item) { return item.toString('utf8'); });
                    cb(err, string_reply);
            });
    }

As you can see, this will return an array of strings instead of an array of buffers.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM