无法从NodeJS连接到MongoDB,后者已作为操作部署在OpenWhisk

时间:2018-08-28 10:02:22

标签: node.js openwhisk

我有以下代码编写了一个名为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');}

});

\

我使用Vagrant在笔记本电脑上安装了OpenWhisk环境。如果将ssh设置为vagrant并ping到192.168.16.1,我会收到ping响应,因此我确定vagrant VM能够访问192.168.16.1。我已经在NodeJS中编写了以下代码来创建OpenWhisk动作。我已将其作为.zip文件(也包括Node_modules文件夹)部署到openwhisk中。

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语句并返回一个简单的字符串,则在调用该操作时会得到该字符串。我确定在OpenWhisk上运行MongoClient.Connect时出现问题。但是,我真的很困惑,因为我没有错误告诉我出了什么问题。

1 个答案:

答案 0 :(得分:1)

entryPoint函数执行异步函数以连接到数据库。执行异步函数调用时,您需要从操作处理程序中返回一个Promise。这样可以确保平台在完成调用之前将阻止该异步结果。

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