Почему "main" не является функцией в моем действии OpenWhisk?

Я пытаюсь загрузить заархивированное действие в IBM OpenWhisk.

"Инициализация не удалась из-за: Точка входа действия" main "не является функцией".

Но я совершенно уверен, что "main" - это функция, и я попытался определить ее несколькими способами. Как подсказывают учебники, я пробовал оба:

function processComment(params) {
    // some code
    return {success:1};
}
exports.main = processComment;

а также

function main(params) {
    // some code
    return {success:1};
}

Этот код, содержащийся в файле, называется index.js, и я попробовал его со следующей строкой в ​​моем package.json и без нее:

"main": "index.js",

Я даже посмотрел соответствующий код в OpenWhisk, и кажется, что это простая проверка типа, чтобы увидеть, является ли main функцией:

if (typeof thisRunner.userScriptMain !== 'function') {
    throw "Action entrypoint '" + message.main + "' is not a function.";
}

Поэтому я предполагаю, что он просто не может найти "главное" в нужном месте... Но я действительно потерян. Кто-нибудь может мне помочь?

1 ответ

Вы используете почтовый файл? Если нет, вы столкнулись с ограничением текущей среды выполнения node.js, как описано в этом выпуске https://github.com/apache/incubator-openwhisk-runtime-nodejs/issues/14 которого вместо этого требуется сжатый исходный файл.

Если вы используете zip, поместили ли вы package.json и index.js в корневой каталог?

В виде zip-файла:

index.js:

function processComment(params) {
    // some code
    return {success:1};
}
exports.main = processComment;

package.json:

{
  "name": "my-action",
  "main": "index.js"
}

И используя CLI:

$ zip s.zip index.js package.json
$ wsk action create s s.zip --kind nodejs:6
$ wsk action invoke s -r
{
    "success": 1
}
Другие вопросы по тегам