我有在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中的两个线程。这两个线程都谈论返回“承诺”,这是我在代码中编写的。我不知道该怎么办
答案 0 :(得分:1)
OpenWhisk要求返回的值是有效的字典。您解析/拒绝的值是函数完成后返回到OpenWhisk的值。因此,您要解析/拒绝的值必须是有效的字典。换句话说,由于您使用的是JavaScript,因此您应解析的值是有效的JSON对象,而您当前正在解析的字符串不是字典/ JSON对象。您想做的是
resolve({'result': "Data Saved"});
或许
resolve({'Data': 'Saved!'})
最终,OpenWhisk需要字典/哈希图/ JSON对象/同义词库或任何其他以JSON形式明确返回的结构化键值映射