使用Express路由器

时间:2017-11-10 21:02:15

标签: angularjs node.js mongodb express bitnami

我在Bitnami Lightsail MEAN堆栈实例上设置了Mongo数据库,我正在尝试使用我正在构建的Angular / Node / Express应用程序进行连接。我已按照有关如何从本地计算机(https://docs.bitnami.com/aws/infrastructure/mean/)连接和创建SSH端口转发的说明进行操作。

我可以访问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}`));

我开始认为这是MEAN Lightsail实例上MongoDB的一些配置问题。如果我尝试在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:PASSWORD@localhost:27017/sakDB时,我收到了不同的身份验证错误:

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

1 个答案:

答案 0 :(得分:0)

看起来这个问题与我的Express应用程序的Bitnami服务器配置有关。它已经解决了。