首页 > 解决方案 > NodeJS - 'database.getOneWhere' 不是一个函数

问题描述

我正在尝试创建全局数据库函数,但每次我尝试访问它们时,它总是说对象未定义,我不知道为什么。

控制器/api/v1/users/index.js:

'use strict';

var path = require('path');
var database = require(path.resolve('database'));

module.exports = function (router) {
    router.put('/', function (req, res) {
        database.getOneWhere('table', 'row', 'data').then(result => {
            //
        });
    });
}

数据库/index.js:

'use strict';

const r = require('rethinkdb');

module.exports = async function() {
    getOneWhere = async function(table, key, value, callback) {
        let conn = await r.connect({host: '127.0.0.1', port: 28015});
        let cursor = await r.db('table').table(table).filter(r.row(key).eq(value)).run(conn);

        try {
            let arr = await cursor.toArray();
            callback(arr);
        } catch(e) {
            callback(e);
        }
    }
}

它总是说这database.getOneWhere不是一个功能。知道如何解决这个问题吗?

标签: javascriptnode.js

解决方案


getOneWhere应该是 的属性module.exports。您将其定义module.exports为一个函数并放入getOneWhere其中。它应该是:

'use strict';

const r = require('rethinkdb');

module.exports = {
    getOneWhere: async function(table, key, value, callback) {
        let conn = await r.connect({host: '127.0.0.1', port: 28015});
        let cursor = await r.db('table').table(table).filter(r.row(key).eq(value)).run(conn);

        try {
            let arr = await cursor.toArray();
            callback(arr);
        } catch(e) {
            callback(e);
        }
    }
};

或者:

'use strict';

const r = require('rethinkdb');

module.exports.getOneWhere = async function(table, key, value, callback) {
    let conn = await r.connect({host: '127.0.0.1', port: 28015});
    let cursor = await r.db('table').table(table).filter(r.row(key).eq(value)).run(conn);

    try {
        let arr = await cursor.toArray();
        callback(arr);
    } catch(e) {
        callback(e);
    }
};

推荐阅读