这是两天以来一直使我发疯的。我只是想返回一个值:从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函数。