OpenWhisk错误:NodeJS代码的“操作未返回字典”

时间:2018-08-31 03:53:32

标签: node.js openwhisk

我有在Windows 10上运行的Vagrant VM for OpenWhisk。我编写了以下代码,用于将记录写入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中的两个线程。这两个线程都谈论返回“承诺”,这是我在代码中编写的。我不知道该怎么办

1 个答案:

答案 0 :(得分:1)

OpenWhisk要求返回的值是有效的字典。您解析/拒绝的值是函数完成后返回到OpenWhisk的值。因此,您要解析/拒绝的值必须是有效的字典。换句话说,由于您使用的是JavaScript,因此您应解析的值是有效的JSON对象,而您当前正在解析的字符串不是字典/ JSON对象。您想做的是 resolve({'result': "Data Saved"}); 或许 resolve({'Data': 'Saved!'})

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