【发布时间】:2019-11-28 02:55:05
【问题描述】:
我正在尝试设置一个 Alexa 技能,当某个问题被问到时,它会调用 MySQL 查询。我尝试的任何方法似乎都不起作用,因为我要么收到错误,要么根本没有任何反应。
我正在使用/正在使用什么:
- Alexa 开发者控制台
- Cloud9 作为 IDE(将代码上传到 AWS Lambda,我在其中定义了代码中使用的环境变量)
- AWS Lambda、NodeJS
- 托管我的数据库实例的 Amazon RDS
- MySQL Workbench(我在其中创建了几个表来测试数据库,效果很好)
我尝试了几种方法来解决我的问题,例如创建连接或池,但我认为必须以不同的方式处理它,因为 Alexa 必须等待响应。
const GetOeffnungszeiten_Handler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === 'IntentRequest' && request.intent.name === 'GetOeffnungszeiten' ;
},
handle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
const responseBuilder = handlerInput.responseBuilder;
let sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
let say = 'OUTPUT: ';
var mysql = require('mysql');
var connection = mysql.createPool({
host : process.env.MYSQL_HOSTNAME,
user : process.env.MYSQL_USERNAME,
password : process.env.MYSQL_PASSWORD,
database : process.env.MYSQL_DATABASE,
port : process.env.MYSQL_PORT
});
exports.handler = (event, context, callback) => {
context.callbackWaitsForEmptyEventLoop = false;
pool.getConnection(function(err, connection) {
connection.query('select name from persons where id=1', function (error, results, fields) {
connection.release();
if (error) {
callback(error);
say=say+'0';
} else {
callback(null,results[0].name);
say=say+' 1';
}
});
});
};
return responseBuilder
.speak(say)
.reprompt('try again, ' + say)
.getResponse();
},
};
我希望输出是“OUTPUT:1”或“OUTPUT:0”,但它是“OUTPUT:” 对于输出,我指的是 say 变量。
【问题讨论】:
标签: mysql node.js amazon-web-services mysql-workbench alexa