Почему "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
}