Сторонний пакет npm в действиях openwhisk / IBM Cloud Functions - PullRequest
0 голосов
/ 26 ноября 2018

Я новичок в OpenWhisk / IBM Cloud Functions.Я пытался создать базовое приложение для бот-чата с использованием IBM Watson Assistant.Итак, у меня есть действие облачных функций, которое вызывается с моего сервера Node.js, у этого действия есть все учетные данные для взаимодействия со службой Watson, я использую пакет npm "watson-developer-cloud" в качестве зависимости.Все работает, как и ожидалось, когда я запускаюсь на локальной машине, однако, когда я заархивирую каталог и загрузлю его как веб-действие OpenWhisk, он не сможет установить зависимости.

Процедура, которой я следовал:

  1. run npm install
  2. сжатие всех файлов в текущем каталоге (включая node_modules)
  3. действие загрузки с использованием следующей команды
    bx wsk action create chataction --kind nodejs:8 chatactionzip.zip
    (здесь chatactionzip - это имя сжатого файла).

Может кто-нибудь помочь мне заставить это работать?Я загружаю скриншоты структуры каталогов.

package.json похож на это

`

{
  "name": "chataction",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "watson-developer-cloud": "^3.13.0"
  }
}

`

это мой код (я удаляю некоторые учетные данные, остальное как есть) `

const AssistantV1 = require('watson-developer-cloud/assistant/v1');

function main(params) {

    var inputText = params.inputText || 'input was not sent';
    //return {result: inputText}
    var assistant = new AssistantV1({
        username: '',
        password: '',
        url: '',
        //api_key: '',
        version: '2018-11-26'
    });

    var inputMessageParams = {
        input: {
            text: inputText
        },
        workspace_id: ''
    }


    assistant.message(inputMessageParams, function(err, result, response) {
        if(err) {
            console.log(err);
            return {err: err}
        }
        else {
            // console.log(response);
            // console.log(response.body.output.text);
            // console.log(response.data);
            return {result: response.body.output.text[0]}
        }
    });

    //return {notHit: 'npm not working'}
}

exports.main = main;

`

вызывающий код выглядит так `

const openwhisk = require('openwhisk');

options = {
    apihost: 'openwhisk.eu-gb.bluemix.net',
    api_key: ''
}

var ow =  openwhisk(options);
var params = {inputText: 'Hello'}
var name = 'chataction';
var blocking = true;
var result = true;
ow.actions.invoke({name, blocking, result, params})
.then((result) => {
    console.log(result);
});

`

directory structure for your reference.

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Пара вещей:

0 голосов
/ 26 ноября 2018

Действия без сервера асинхронны, вам нужно обернуть ваш код в Promise или использовать try / catch, если используемый вами API уже возвращает Promise

Ваша основная функция завершается до того, как вызов метода assistant.message() завершится.done

    return new Promise((resolve, reject) =>{
       assistant.message(inputMessageParams, function(err, result, response) {
          if(err) {
            console.log(err);
            reject({err: err})
         }
         else {
           // console.log(response);
           // console.log(response.body.output.text);
           // console.log(response.data);
           resolve( {result: response.body.output.text[0]})
         }
       });
    });

Подробнее об асинхронном JavaScript в документации здесь: https://console.bluemix.net/docs/openwhisk/openwhisk_reference.html#openwhisk_ref_javascript

0 голосов
/ 26 ноября 2018

На первый взгляд, созданное вами действие - чатация, но вы вызываете ChatActionZip

...