OpenWhisk 错误:"The action did not return a dictionary" NodeJS 代码



我有在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."
}

我已经在堆栈溢出中经历了与此错误相关的两个线程。这两个线程都谈到返回我在代码中编写的"promise"。我不知道我还能做什么

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

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

最新更新