Return 在环回远程方法上查询 rethinkdbdash

Return query rethinkdbdash on loopback remote method

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') 上的记录或结果 return 但浏览器中没有 return.. .

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

你的代码有点不对劲,好了:

(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);

出现您提到的错误是因为您return 的数据必须 与您在下面定义的"arg" 同名。在您的代码中,"results" 它只是没有名称的原始数据。 Loopback 正在寻找类似的东西:

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

这是一回事。另一件事是,如果你想要随机结果(正如人们可能通过方法的名称所想的那样),你需要提供样本函数,否则你只是 return 按常规(降序?)顺序排列所有数据如果请求足够大,您可能会遇到问题。