Node.js OpenWhisk错误:NodeJS代码的“操作未返回字典”
我有运行在Windows10上的OpenWhisk的Vagrant VM。我编写了以下代码,用于向MongoDB写入记录Node.js OpenWhisk错误:NodeJS代码的“操作未返回字典”,node.js,openwhisk,Node.js,Openwhisk,我有运行在Windows10上的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').MongoCli
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中,我经历了与此错误相关的两个线程。这两个线程都谈到返回“promise”,这是我在代码中编写的。我不知道我还应该做什么OpenWhisk需要一个有效字典的返回值。解析/拒绝的值是函数完成时返回给OpenWhisk的值。因此,解析/拒绝的值必须是有效的字典。换句话说,因为您使用的是javascript,所以您应该解析的值是一个有效的JSON对象,而您当前解析的字符串不是dictionary/JSON对象。你想做的是 解析{'result':数据已保存}; 或许 解析{'Data':'Saved!'
最终,OpenWhisk需要一个dictionary/hashmap/JSON object/thesaurus或任何其他以JSON显式返回的结构化键值映射I更新了代码以返回resolve{'result':Data Saved};。现在,当我执行操作时,我看到没有返回任何内容。没有错误消息,但记录已保存。这对我来说是可以的,只要没有错误,但是为什么它现在不在控制台上显示任何消息呢?您如何调用该操作?是否获得激活id?请尝试wsk action invoke testing-br,这会告诉OpenWhisk在运行您的操作时阻止,然后告诉它在操作完成后返回结果对象如果这不能为您提供预期的结果,然后,您是否可以在节点环境中执行该函数,以确保代码是正确的?