Ошибка OpenWhisk: «Действие не вернул словарь» для кода NodeJS - PullRequest
0 голосов
/ 31 августа 2018

У меня Vagrant VM для OpenWhisk, работающая на Windows 10. Я написал следующий код для записи записи в 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 голосов
/ 31 августа 2018

OpenWhisk требует возвращаемого значения, которое является допустимым словарем. Значение, которое вы разрешаете / отклоняете, является значением, возвращаемым OpenWhisk по завершении функции. Поэтому значение, которое вы разрешаете / отклоняете, должно быть допустимым словарем. Другими словами, поскольку вы используете javascript, значение, которое вы должны разрешить, является допустимым объектом JSON, тогда как вы в настоящее время разрешаете строку, которая не является объектом словаря / JSON. То, что вы хотели бы сделать, это resolve({'result': "Data Saved"}); или, может быть resolve({'Data': 'Saved!'})

в конечном счете OpenWhisk требует словарь / hashmap / JSON-объект / тезаурус или любое другое отображение значений структурированного ключа, явно возвращенное как JSON

...