Невозможно подключиться к MongoDB из NodeJS, развернуто как действие в OpenWhisk - PullRequest
0 голосов
/ 28 августа 2018

У меня следующий код написан файл с именем app.js. MongoDB установлен на 192.168.16.1, который является моим ноутбуком. Когда я запускаю это с помощью команды node app.js, я получаю сообщение «подключен».

 var mongoose = require('mongoose');
    var Schema = mongoose.Schema;


    var mongoose = require('mongoose');
    var MongoClient = require('mongodb').MongoClient;
// Connect to the db
    MongoClient.connect("mongodb://192.168.16.1:27017/angularcrud", function (err, db) {

     if(err) {console.log(err); }
     else {console.log('connected');}

});

\

У меня на ноутбуке настроена среда OpenWhisk с использованием Vagrant. Если ssh to vagrant и ping на 192.168.16.1, я получаю ответ ping, так что я уверен, что vagrant VM может достичь 192.168.16.1. Я написал следующий код в NodeJS для создания действия OpenWhisk. Я развернул его в openwhisk в виде файла .zip (который также включает в себя папки Node_modules).

function entryPoint(args) {


    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    var message = "Connection not SET";

    var mongoose = require('mongoose');
    var MongoClient = require('mongodb').MongoClient;
// Connect to the db
MongoClient.connect("mongodb://193.168.16.1:27017/angularcrud", function (err, db) {

     if(err) {return err;}
      else {return 'success';}



});
}

module.exports.main = entryPoint;

Если я запускаю приведенный выше код в OpenWhisk, я получаю результат {}. Если я удаляю инструкцию MongoClient.Connect и возвращаю простую строку, я получаю строку, когда вызываю действие. Я уверен, что что-то не так в MongoClient.Connect при запуске на OpenWhisk. Но я действительно застрял, потому что у меня нет ошибки, чтобы сказать мне, что происходит не так.

1 Ответ

0 голосов
/ 28 августа 2018

Функция entryPoint выполняет асинхронную функцию для подключения к базе данных. При выполнении асинхронных вызовов функций вам необходимо вернуть Promise из обработчика действия. Это гарантирует, что платформа заблокирует этот асинхронный результат перед завершением вызова.

function main() {
  return new Promise((resolve, reject) => {
    MongoClient.connect(URL,  (err, db) => {
      if(err) return reject(err)
      resolve({message: "success"})
    })        
  })
}
...