2017-11-10 10 views
0

건물에있는 Angular/Node/Express 응용 프로그램과 연결하려고하는 Bitnami Lightsail 평균 스택 인스턴스에 Mongo 데이터베이스를 설정했습니다. 내 로컬 컴퓨터 (https://docs.bitnami.com/aws/infrastructure/mean/)에서 SSH 포트 전달을 연결하고 만드는 방법에 대한 지침을 따랐습니다.Express 라우터를 사용하여 MongoDB에 반환 된 데이터 없음

내 몽고 데이터베이스로 MEAN Lightsail 인스턴스에 설정된 RockMongo에 액세스 할 수있는 localhost : 8888에 액세스 할 수 있습니다. 즉, 내 로컬 컴퓨터에서 서버에 연결하기위한 구성이 괜찮다고 생각합니다.

node server을 실행하고 내 api GET 메서드의 URL (http://localhost:3000/api/numbers)로 이동하면 데이터베이스 연결시 오류가 발생하지 않습니다.

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에 대한 코드 : 여기

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

내 api.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의 쉘에서 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의 서버 구성에 관련 된 것 같습니다. 그것은 해결되었습니다.