2017-11-10 80 views
0

我在一个Bitnami Lightsail MEAN栈实例上设置了一个Mongo数据库,我尝试使用我正在构建的Angular/Node/Express应用程序连接到该实例。我遵循了关于如何从本地计算机连接和创建SSH端口转发的说明(https://docs.bitnami.com/aws/infrastructure/mean/)。使用Express路由器在MongoDB上没有返回数据

我可以访问localhost:8888,它使我可以访问在我的Mongo数据库上设置在MEAN Lightsail实例上的RockMongo。话虽如此,我认为从本地机器连接到服务器的配置没问题。

当我运行node server并导航到我的api GET方法的URL(http://localhost:3000/api/numbers)时,我没有收到连接到数据库的错误。相反,我获得以下响应,这基本上是数据的一个空数组:

{"status":200,"data":[],"message":null} 

这里是我的api.js文件的代码:

const express = require('express'); 
const router = express.Router(); 
const MongoClient = require('mongodb').MongoClient; 
const ObjectID = require('mongodb').ObjectID; 

// Connect 
const connection = (closure) => { 
    return MongoClient.connect('mongodb://localhost:27017/sakDB', (err, db) => { 
     if (err) { 
      return console.log(err); 
     } 

     closure(db); 
    }); 
}; 

// Error handling 
const sendError = (err, res) => { 
    response.status = 501; 
    response.message = typeof err == 'object' ? err.message : err; 
    res.status(501).json(response); 
}; 

// Response handling 
let response = { 
    status: 200, 
    data: [], 
    message: null 
}; 

// Get numbers 
router.get('/numbers', (req, res) => { 
    connection((db) => { 
     db.collection('numbers') 
      .find() 
      .toArray() 
      .then((numbers) => { 
       response.data = numbers; 
       res.json(response); 
      }) 
      .catch((err) => { 
       sendError(err, res); 
      }); 
    }); 
}); 

module.exports = router; 

而对于我router.js代码文件:

const express = require('express'); 
const bodyParser = require('body-parser'); 
const path = require('path'); 
const http = require('http'); 
const app = express(); 

const api = require('./server/routes/api'); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 

app.use(express.static(path.join(__dirname, 'dist'))); 

app.use('/api', api); 

app.get('*', (req, res) => { 
    res.sendFile(path.join(__dirname, 'dist/index.html')); 
}); 

const port = process.env.PORT || '3000'; 
app.set('port', port); 

const server = http.createServer(app); 

server.listen(port,() => console.log(`Running on localhost:${port}`)); 

我开始认为这是MongoDB的一些配置问题上的平均Lightsail实例。如果我尝试在MongoDB的shell中运行db.numbers.find(),我得到以下错误:

MongoDB server version: 3.4.7 
> db.numbers.find() 
Error: error: { 
     "ok" : 0, 
     "errmsg" : "not authorized on sakDB to execute command { find: \"numbers\", filter: {} }", 
     "code" : 13, 
     "codeName" : "Unauthorized" 
} 

我必须登录为用户mongo sakDB -u admin -p,我为了找到对收集的数据创建。

当我尝试添加这些凭据连接字符串mongodb://admin:[email protected]:27017/sakDB,我收到了不同的身份验证错误:

name: 'MongoError', 
    message: 'Authentication failed.', 
    ok: 0, 
    errmsg: 'Authentication failed.', 
    code: 18, 
    codeName: 'AuthenticationFailed' } 
+0

也许这是图书馆的问题。你有没有检查过这个入门指南? https://docs.bitnami.com/google/infrastructure/mean/#how-can-i-get-started-with-mean –

回答

0

它看起来像这样问题涉及Bitnami的服务器配置与我的Express应用程序。它已经解决。

相关问题