【问题标题】:OpenWhisk error: "The action did not return a dictionary" for NodeJS codeOpenWhisk 错误:NodeJS 代码的“操作未返回字典”
【发布时间】:2018-08-31 13:45:51
【问题描述】:

我在 Windows 10 上运行用于 OpenWhisk 的 Vagrant VM。我编写了以下代码来将记录写入 MongoDB。

function entryPoint(args) {

  var coindata = {name:args.coindata.name,price: args.coindata.price}

    var mongoose = require('mongoose');
    var MongoClient = require('mongodb').MongoClient;
     var Schema = mongoose.Schema;
    var returnMessage;

    mongoose.Promise = global.Promise;

    return new Promise((resolve, reject) => {
      mongoose.connect("mongodb://192.168.16.1:27017/angularcrud").then(
        () => 
        {
          var Coin = new Schema({ 
            name: {
              type: String
            },
            price: {
              type: Number
            }
          });


          var coinModel = mongoose.model('Coin', Coin);
          var coinObj = new coinModel(coindata);


          coinObj.save()
          .then(item => {
            resolve("Data Saved");;
          })
          .catch(err => {
            reject(err);
          });

        },
        err => { return reject(err)}
        ); 

    })
  }

 module.exports.main = entryPoint;

我已经执行了以下命令:

wsk action -i invoke testing -br -p coindata "{\"name\": \"coin200\", \"price\": 3 }"

执行上述命令后,我看到记录正在添加到 MongoDb 中,但同时我也在控制台上看到以下错误。

{
    "error": "The action did not return a dictionary."
}

我已经在 stackoverflow 中处理了与此错误相关的两个线程。两个线程都在谈论返回“承诺”,这是我在代码中编写的。我不知道我还能做什么

【问题讨论】:

    标签: node.js openwhisk


    【解决方案1】:

    OpenWhisk 需要一个有效字典的返回值。您解析/拒绝的值是函数完成时返回给 OpenWhisk 的值。因此,您解析/拒绝的值必须是有效的字典。换句话说,由于您使用的是 javascript,因此您应该解析的值是有效的 JSON 对象,而您当前正在解析的字符串不是字典/JSON 对象。你想做的是 resolve({'result': "Data Saved"}); 或者可能 resolve({'Data': 'Saved!'})

    最终,OpenWhisk 需要字典/哈希图/JSON 对象/同义词库或任何其他显式返回为 JSON 的结构化键值映射

    【讨论】:

    • 我更新了代码以返回 "resolve({'result': "Data Saved"});"。现在,当我执行操作时,我没有看到任何返回。没有错误消息,但记录已保存。只要没有错误,这对我来说没问题,但为什么现在控制台上没有显示任何消息。 ?
    • 你是如何调用动作的?
    • 你有激活ID吗?
    • 尝试 wsk action invoke testing -br ,这告诉 OpenWhisk 在运行您的操作时阻止,然后告诉它在操作完成后返回结果对象
    • 如果这不能为您提供预期的结果,您是否可以在节点环境中执行该函数以确保代码正确?
    猜你喜欢
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2023-03-21
    相关资源
    最近更新 更多