繁体   English   中英

如何从Amazon dynamodb JavaScript SDK查询返回Hapijs API中的未定义值?

[英]How to return non undefined values in Hapijs api from amazon dynamodb javascript SDK query?

这已经让我抓狂了两天了。 我只想返回一个值:从Amazon dynamob javascript SDK到hapijs中的特定路由。

我的配置是:

  • nodejs:v9.5.0
  • 和从package.json:

    • “ hapi”:“ ^ 16.6.2”,

    • “ aws-sdk”:“ ^ 2.183.0”,

    • “ babel-core”:“ ^ 6.26.0”,

    • “ babel-preset-es2015”:“ ^ 6.24.1”,

我不喜欢的route.js文件如下:

    import _myConfig from './config';
    import AWS from 'aws-sdk';
    import SESSIONS from './CRUD-sessions.js';

    AWS.config.update({
    accessKeyId: "XXXXXXXX",
    secretAccessKey: "xxxxxxxxxx",
    region: "us-east-1",
    httpOptions: {timeout: 500}
    });

    const routes = [
    { 
    path: '/retrieveLastSession',
    method: 'GET',
    handler: async ( request, reply ) => {
        var myLastSession = await SESSIONS.retrieveLastSession(console, "myEmail@gmail.com");
        console.debug("myLastSession: " + myLastSession);
        return reply(myLastSession).code(200);
        }   
    }

];

export default routes;

还有我的CRUD-sessions.js文件:

'use strict';
import _myConfig from './config';
import AWS from 'aws-sdk';

const SESSIONS =
{
  retrieveLastSession : async function (console, escapedInputEmail) {
  var ddb = new AWS.DynamoDB();
  var params = {
            TableName: "sessions",
            "ExpressionAttributeValues": {":escapedEmail" : {"S" : escapedInputEmail} },
            "KeyConditionExpression": "email = :escapedEmail",
            "Limit": 1,
            ScanIndexForward: false
          };
  var _reply = undefined;
  await ddb.query(params, function(err, data) { 
          if (err) {
            console.error(err + ' Unable to read last session item ' + err.stack);
           } 
          else if (data === undefined || data.Items === undefined || 
            data.Items.length<1) {
            console.log('last session item empty or partly empty');
         }
         else {
             console.debug("data: " + JSON.stringify(data));
             _reply = {
            'token' : data.Items[0].token.S,
            'email': escapedInputEmail,
            'timestamp' : data.Items[0].timestamp.N
             };

          console.debug("last session: " + JSON.stringify(_reply));
        }
  });
  console.debug("_reply: " + JSON.stringify(_reply)); // prints undefined !!!
  return _reply;
  }
  };

export default SESSIONS;

在/ retrieveLastSession路由中,无论是否带有异步/等待组合,我都不会得到除var myLastSession之外的任何东西!

任何想法? 欢迎帮助!

找到了它:我没有返回值,而是制作了一个回调函数,并将其作为参数传递给了retrieveLastSession函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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