使用 Alexa Skill 连接到 Postgresql
Posted
技术标签:
【中文标题】使用 Alexa Skill 连接到 Postgresql【英文标题】:Connect to Postgresql with Alexa Skill 【发布时间】:2018-04-09 15:38:31 【问题描述】:我正在尝试开发一个简单的 Alexa Skill,它使用 node.js 连接到 postgresql 数据库并返回结果。
我可以使用本地机器上的 node.js 连接到数据库,但在上传到 aws 上的 lambda 函数时不能。
我还是个新手,还在学习。我在发帖前做了很多研究,但没有运气。
'query_one': function ()
const Pool, Client = require('pg')
const pool = new Pool(
user: 'username',
host: 'host information',
database: 'database name',
password: 'password',
port: 5432,
)
pool.query('SELECT * FROM responses', (err, res) =>
console.log(res.rows[1].answer)
pool.end()
)
this.emit(':tellWithCard', 'test', this.t('SKILL_NAME'), 'test');
完整代码包括
'use strict';
const Alexa = require('alexa-sdk');
const APP_ID = 'app id is hidden from here'; // TODO replace with your app ID (OPTIONAL).
const languageStrings =
'en':
translation:
FACTS: [
'SELECT answer FROM responses WHERE query_id=1',
'SELECT answer FROM responses WHERE query_id=2',
],
SKILL_NAME: 'Space Facts',
GET_FACT_MESSAGE: "Here's your fact: ",
HELP_MESSAGE: 'You can ask me questions about the health of the system, or, you can say exit... What can I help you with?',
HELP_REPROMPT: 'What can I help you with?',
STOP_MESSAGE: 'Goodbye!',
WELCOME: 'Welcome to the health check monitor',
,
,
;
const handlers =
'LaunchRequest': function ()
const welcome = this.t('WELCOME');
this.emit(':tellWithCard', welcome, welcome, welcome);
,
'query_one': function ()
const Pool, Client = require('pg')
const pool = new Pool(
user: 'username',
host: 'host information',
database: 'database name',
password: 'password',
port: 5432,
)
pool.query('SELECT * FROM responses', (err, res) =>
console.log(res.rows[1].answer)
pool.end()
)
this.emit(':tellWithCard', 'test', this.t('SKILL_NAME'), 'test');
,
'query_two': function ()
const factArr = this.t('FACTS');
const randomFact = factArr[1];
const speechOutput = this.t('GET_FACT_MESSAGE');
this.emit(':tellWithCard', speechOutput, this.t('SKILL_NAME'), randomFact);
,
'AMAZON.HelpIntent': function ()
const speechOutput = this.t('HELP_MESSAGE');
const reprompt = this.t('HELP_MESSAGE');
this.emit(':ask', speechOutput, reprompt);
,
'AMAZON.CancelIntent': function ()
this.emit(':tell', this.t('STOP_MESSAGE'));
,
'AMAZON.StopIntent': function ()
this.emit(':tell', this.t('STOP_MESSAGE'));
,
;
exports.handler = function (event, context)
const alexa = Alexa.handler(event, context);
alexa.APP_ID = APP_ID;
// To enable string internationalization (i18n) features, set a resources object.
alexa.resources = languageStrings;
alexa.registerHandlers(handlers);
alexa.execute();
;
【问题讨论】:
【参考方案1】:首先你所有的发射都会失败,这是正确的格式。 this.emit(':tellWithCard', speechOutput, cardTitle, cardContent, imageObj); 有关连接到数据库的信息,请参阅此帖子 How to make connection to Postgres via Node.js
享受,乐于助人!
【讨论】:
猎人您好,感谢您的回复。发射当前按预期工作。但是,与数据库的连接在我的本地工作正常,但是相同的代码在 lambda 函数中不起作用。我现在正在尝试将查询结果打印在日志中。 嗯,我不知道 lambda,我到处使用 nodejs。并点击自定义 https 端点并将任何变量保存到 json 对象。然后将它们作为 json 对象读取。 blog.risingstack.com/… 呢?你也可以每月花 5 美元去digitalocean.com 获得一个液滴,然后你就可以完全控制了。而且您的代码运行良好,因为您已经知道它可以在 nodejs 中运行。消除亚马逊中间商以上是关于使用 Alexa Skill 连接到 Postgresql的主要内容,如果未能解决你的问题,请参考以下文章
Alexa Skill - 如何获取要求 Alexa 的完整声明文本