在loopback remote方法

时间:2016-07-06 18:57:41

标签: node.js rethinkdb loopback

1.-我正在使用loopback-connector-rethinkdbdash

2.-在远程方法上,我需要从我的数据库中检索一些随机记录,这是到目前为止的代码。

(function(){
    'use strict';
    module.exports = (Heatmap) => {
        var r = require('rethinkdb');
        // Connect to RethinkDB
        var p = r.connect({
            host: 'rethink',
            port: 28015,
            db: 'livedata'
        });


        // Error Handler
        function throwErr(err) {
            throw (err);
        }
        
        // Random Remote Method
        Heatmap.random = (cb) => {
            p.then(function(conn) {
                r.table('heatmap').run(conn, function(err, cursor) {
                        cursor.toArray(function(err, results) {
                            console.log('ALO-4', results)
                            cb(err, results);
                        })
                })
       	    }).error(throwErr);             
        }; // Heatmap.random

        Heatmap.remoteMethod(
            'random',
            {
              accepts : [],
              returns : { arg  : 'results', type : 'array', root : true },
              http    : { path : '/random', verb  : 'get' }
            }
        ); // Heatmap.remoteMethod
    };
}).call(this);

3.-我已经关注此文档:https://github.com/neumino/rethinkdbdash https://docs.strongloop.com/display/public/LB/Remote+methods#Remotemethods-Argumentdescriptions

4.-关键是记录或结果在console.log('ALO-4')上返回,但它们不会在浏览器中返回...

我不知道发生了什么事,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

你的代码有点偏离,你去了:

(function () {
'use strict';
module.exports = function (Heatmap) {
    var r = require('rethinkdb');
    // Connect to RethinkDB
    var p = r.connect({
        host: 'rethink',
        port: 28015,
        db: 'livedata'
    });
    // Error Handler
    function throwErr(err) {
        throw (err);
    }
    // Random Remote Method
    Heatmap.random = function (cb) {
        var results = null;
        p.then(function (conn) {
            r.table('heatmap').sample(100).run(conn, function (err, cursor) {
                cursor.toArray(function (err, arr) {
                    results = arr;
                    cb(err, results);
                });
            });
        }).error(throwErr);
    }; // Heatmap.random
    Heatmap.remoteMethod('random', {
        returns: { arg: 'results', type: 'array', root: true },
        http: { path: '/random', verb: 'get' }
    }); // Heatmap.remoteMethod
};
}).call(this);

您提到的错误是因为您返回的数据必须与您在下面定义的“arg”具有相同的名称。在您的代码中,“结果”只是原始数据没有名称。 Loopback正在寻找类似的东西:

results = ["foo, bar, baz"];

这是一回事。另一件事是,如果你想要随机结果(正如人们可能会想到的那样),你需要提供样本函数,否则你只需要以常规(降序?)顺序返回所有数据,如果是请求它是你可能有问题。