带有PG-Promise的AWS Lambda NodeJS-从模块调用函数时获取空查 询结果

问题描述 投票:0回答:1

对于大多数人来说,这可能很简单,但是我已经为此苦苦挣扎了好几个小时。我有一个aws lambda函数,该函数对RDS pgsql数据库执行多个带有pg-promise的pgsql查询。为了组织代码,我想将一些功能分成模块。

我可以在主文件中执行并获取结果,但是当我尝试另一个文件并将其导出为模块时。我只有一个空的对象。

文件(被截断)

index.js

exports.handler = function (event, context, callback) {
    context.callbackWaitsForEmptyEventLoop = false;

    const db = require('./dbconfig');

    const helpers = require('./helpers');

    var userid = 1; // testing purpose

    var tagexist = helpers.tagexist

    var istagexist = tagexist(tags, userid);

    callback(null, {"message" : istagexist});
};

预期的行为:“消息”:id,实际结果:“消息”:{}

helpers.js

const db = require('./dbconfig');

module.exports = {

    tagexist : function (tags, uid) {
        db.oneOrNone('SELECT id FROM table_tags WHERE tag = $1 and uid = $2', [tags, uid])
        .then((id) => {
            return id;
        })
        .catch((err) => {return err;})
        .then(() => {db.$pool.end()});
    }
};

dbconf.js

const pgp = require('pg-promise')();
const dbconfig = {
    user: 'sandbox',
    host: 'host',
    database: 'sandbox',
    password: 'pass',
    port: 5432,  
}
const db = pgp(dbconfig);

module.exports = db;
node.js aws-lambda pg pg-promise
1个回答
1
投票

您的helper.js应该看起来像这样,基本上您需要退还诺言。


const db = require('./dbconfig');

module.exports = {

    tagexist : function (tags, uid) {
        return db.oneOrNone('SELECT id FROM table_tags WHERE tag = $1 and uid = $2', [tags, uid])
        .then((id) => {
            return id;
        })
        .catch((err) => {return err;})
        .then(() => {db.$pool.end()});
    }
};

index.js应该看起来像这样。基本上,您需要谨慎应对诺言。由于您已经在使用Promise,因此可以通过使用asyn / await而不使用回调来简化代码。

exports.handler = async function (event) {

    const db = require('./dbconfig');

    const helpers = require('./helpers');

    var userid = 1; // testing purpose

    var tagexist = helpers.tagexist

    var istagexist = await tagexist(tags, userid);

    return {"message" : istagexist};
};

© www.soinside.com 2019 - 2024. All rights reserved.