无法从 NodeJS 连接到 MongoDB,部署为 OpenWhisk 中的操作
Unable to connect to MongoDB from NodeJS, deployed as action in OpenWhisk
我用下面的代码写了一个叫app.js的文件。 MongoDB 安装在 192.168.16.1 上,这是我的笔记本电脑。当我 运行 使用节点 app.js 命令时,我收到一条消息 "connected".
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 文件部署到 openwhisk 中(其中还包括 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 语句和 return 一个简单的字符串,那么我将在调用该操作时获取该字符串。当 OpenWhisk 上的 运行 时,我确定 MongoClient.Connect 有问题。但是,我真的被卡住了,因为我没有错误告诉我出了什么问题。
entryPoint
函数执行异步函数连接数据库。在执行异步函数调用时,您需要 return 来自操作处理程序的 Promise。这确保平台将在完成调用之前阻塞该异步结果。
function main() {
return new Promise((resolve, reject) => {
MongoClient.connect(URL, (err, db) => {
if(err) return reject(err)
resolve({message: "success"})
})
})
}
我用下面的代码写了一个叫app.js的文件。 MongoDB 安装在 192.168.16.1 上,这是我的笔记本电脑。当我 运行 使用节点 app.js 命令时,我收到一条消息 "connected".
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 文件部署到 openwhisk 中(其中还包括 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 语句和 return 一个简单的字符串,那么我将在调用该操作时获取该字符串。当 OpenWhisk 上的 运行 时,我确定 MongoClient.Connect 有问题。但是,我真的被卡住了,因为我没有错误告诉我出了什么问题。
entryPoint
函数执行异步函数连接数据库。在执行异步函数调用时,您需要 return 来自操作处理程序的 Promise。这确保平台将在完成调用之前阻塞该异步结果。
function main() {
return new Promise((resolve, reject) => {
MongoClient.connect(URL, (err, db) => {
if(err) return reject(err)
resolve({message: "success"})
})
})
}