node.js - 部署对话流示例代码时出错
问题描述
我正在尝试部署示例天气对话流聊天机器人,
我正在按照对话流程手册中的说明进行部署
部署 index.js 我正在使用以下命令
gcloud beta functions deploy helloHttp --stage-bucket weather-example --trigger-http
部署文件后出现以下错误
ERROR: (gcloud.beta.functions.deploy) OperationError: code=3, message=Function load error: Node.js module defined by file index.js is expected to export function named helloHttp
我不知道如何解决它,我是谷歌云和对话流的新手,
这是我的 index.js 文件,我刚刚添加了我的是否 api 键
'use strict';
const http = require('http');
const host = 'api.worldweatheronline.com';
const wwoApiKey = 'MY wheather key';
exports.weatherWebhook = (req, res) => {
// Get the city and date from the request
let city = req.body.queryResult.parameters['geo-city']; // city is a required param
// Get the date for the weather forecast (if present)
let date = '';
if (req.body.queryResult.parameters['date']) {
date = req.body.queryResult.parameters['date'];
console.log('Date: ' + date);
}
// Call the weather API
callWeatherApi(city, date).then((output) => {
res.json({ 'fulfillmentText': output }); // Return the results of the weather API to Dialogflow
}).catch(() => {
res.json({ 'fulfillmentText': `I don't know the weather but I hope it's good!` });
});
};
function callWeatherApi (city, date) {
return new Promise((resolve, reject) => {
// Create the path for the HTTP request to get the weather
let path = '/premium/v1/weather.ashx?format=json&num_of_days=1' +
'&q=' + encodeURIComponent(city) + '&key=' + wwoApiKey + '&date=' + date;
console.log('API Request: ' + host + path);
// Make the HTTP request to get the weather
http.get({host: host, path: path}, (res) => {
let body = ''; // var to store the response chunks
res.on('data', (d) => { body += d; }); // store each response chunk
res.on('end', () => {
// After all the data has been received parse the JSON for desired data
let response = JSON.parse(body);
let forecast = response['data']['weather'][0];
let location = response['data']['request'][0];
let conditions = response['data']['current_condition'][0];
let currentConditions = conditions['weatherDesc'][0]['value'];
// Create response
let output = `Current conditions in the ${location['type']}
${location['query']} are ${currentConditions} with a projected high of
${forecast['maxtempC']}°C or ${forecast['maxtempF']}°F and a low of
${forecast['mintempC']}°C or ${forecast['mintempF']}°F on
${forecast['date']}.`;
// Resolve the promise with the output text
console.log(output);
resolve(output);
});
res.on('error', (error) => {
console.log(`Error calling the weather API: ${error}`)
reject();
});
});
});
}
你能告诉我这里出了什么问题吗?
解决方案
根据您的index.js文件,您正在导出名为 javascript 函数的weatherWebhook,因此您应该将deploy
GCloud beta 函数的命令的部署函数名称属性的值与导出的方法名称相同,因为默认情况下,当触发 Google Cloud 函数时,它执行同名的 JavaScript 函数,或者如果找不到同名的函数,则执行名为 的函数function
。
为此,您的命令是,试试这个
gcloud beta functions deploy weatherWebhook --stage-bucket weather-example --trigger-http
或者
您可以使用--entry-point参数告诉 gcp 哪个函数将是您的 Google Cloud 函数的入口点,如果您想要为您的部署使用不同的名称。
gcloud beta functions deploy helloHttp --entry-point weatherWebhook --stage-bucket weather-example --trigger-http
有关谷歌云功能deploy
命令的更多信息,请单击此处
推荐阅读
- cordova - `cordova run --list` 导致 ECONNREFUSED
- node.js - 如何在 cPanel 上连接 node.js 后端和 react.js 前端?
- react-native - 在本机反应中传递元素的位置
- react-native - React Navigation v5 使用抽屉过滤屏幕上的细节
- java - 编译器在错误的类中寻找主要方法
- serialization - 序列化不实现序列化的外部 crate 枚举的 vec
- javascript - 如何从子组件中更新和删除元素数组并将其传递给 ReactJs 中的父组件
- sql - SQL自动过滤结果
- ios - 运行时缺少属性
- swift - 处理通过 NSViewRepresentable 嵌入的 NSTextView 中的键盘输入?(SwiftUI/MacOS)