如何从Amazon DynamoDB JavaScript SDK查询中返回HAPIJS API中的非未定义值



这是两天以来一直使我发疯的。我只是想返回一个值:从Amazon DynamoDB JavaScript SDK到Hapijs的特定路线。

我的配置是:

  • nodejs:v9.5.0

  • 和来自package.json: - &quot" hapi":&quot'^16.6.2&quot,

    - "aws-sdk": "^2.183.0",
    - "babel-core": "^6.26.0",
    - "babel-preset-es2015": "^6.24.1",
    

我的汇总路由。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!

有什么想法吗?帮助欢迎!

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

最新更新