건물에있는 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' }
아마도 라이브러리에 문제가있을 수 있습니다. 이 시작 안내서를 확인 했습니까? https://docs.bitnami.com/google/infrastructure/mean/#how-can-i-get-started-with-mean –