Node.js / Express 앱에 DB 구성을 저장하는 가장 좋은 방법
node.js / Express에서 실행되는 오픈 소스 앱에 DB 구성 (사용자 이름, 비밀번호)을 저장하는 가장 좋은 방법은 무엇입니까? 두 가지 구체적인 질문 :
/lib
예를 들어 폴더 에있는 별도의 config.js 파일에 저장하고 GitHub에서 공개적으로 사용할 수있는 마스터 리포지토리에는 포함하지 않습니다.을 포함하려면 구성
require('./config.js')
필요한 파일 에서처럼 간단 합니까? 아니면 더 나은 방법이 있습니까?
추신 : 질문이 약간 간단하거나 잘화되지 않은 경우 미안하지만 공식적으로 시작했습니다. :)
이것이 모범 사례인지 확실하지 않지만 개인적으로 config.json
DB 연결 정보를 저장 하는 파일이 있습니다. 그런 다음 다음을 수행합니다.
// options.js
var fs = require('fs'),
configPath = './config.json';
var parsed = JSON.parse(fs.readFileSync(configPath, 'UTF-8'));
exports.storageConfig= parsed;
그런 다음 다른 파일에서 다음을 수행합니다.
var options = require('./options');
var loginData = {
host: options.storageConfig.HOST,
user: options.storageConfig.user,
password: options.storageConfig.password
};
방법은 다음과 가변합니다.
구성을 구성을 포함하는 config.js를 만듭니다.
var config = {
development: {
//url to be used in link generation
url: 'http://my.site.com',
//mongodb connection settings
database: {
host: '127.0.0.1',
port: '27017',
db: 'site_dev'
},
//server details
server: {
host: '127.0.0.1',
port: '3422'
}
},
production: {
//url to be used in link generation
url: 'http://my.site.com',
//mongodb connection settings
database: {
host: '127.0.0.1',
port: '27017',
db: 'site'
},
//server details
server: {
host: '127.0.0.1',
port: '3421'
}
}
};
module.exports = config;
그런 다음 내 index.js (또는 실제로 어디에서나),
var env = process.env.NODE_ENV || 'development';
var config = require('./config')[env];
그런 다음 해당 개체로 처리합니다.
var server = express();
server.listen(config.server.port);
...
db 자격 증명을 숨겨야하는 장난감 앱을 실행 하면 dotenv 모듈을 사용 합니다 .
민감한 정보를 .env 파일 (.gitignored) require('dotenv').config();
에 숫자 앱에 넣습니다 . dotenv process.env
는 참조 할 수있는 항목을 만듭니다 .
.env
파일 :
DATABASE_PASSWORD=mypw
DATABASE_NAME=some_db
값을 참조 :
process.env.DATABASE_PASSWORD
나는 args를 넣습니다. 너무 많은 node.js 예제의 포트처럼. 당신은 영원히, pm2, nodemon이 당신의 앱을 가능성이 있습니다. 따라서이 변수는 소스 코드의 일부로 체크인되지 않습니다. 또한 전 세계적으로 사용할 수 있습니다.
process.env.PORT
process.env.DATABASE_USER
process.env.DATABASE_PASSWORD
PORT=3000 DATABASE_HOST=localhost DATABASE_USER=admin DATABASE_PASSWORD=mypassword node app.js
export PORT=3000
export DATABASE_HOST=localhost
export DATABASE_PORT=27017
export DATABASE_USER=admin
export DATABASE_PASSWORD=mypassword
node app.js
var server = app.listen(process.env.PORT, function() {
});
var mongoClient = new MongoClient(new Server(process.env.DATABASE_HOST, process.env.DATABASE_PORT));
구성을 포함해야 할 파일에서 필요 ( './ config.js')만큼 충분합니까? 아니면 더 나은 방법이 있습니까?
이것이 구성 파일을 저장하는 올바른 방법입니다.
가장 좋은 방법은 일반 node.js 모듈처럼 전체 애플리케이션을 작성하고이를 호출하는 작은 시작 파일을 작성하는 것입니다. 이 아이디어를 통해 종속성 주입을 사용하여 다른 데이터베이스 드라이버를 사용할 수도 있습니다.
좋지만 완벽한 해결책은 아닙니다. 모든 응용 프로그램간에 공유되므로 모든 응용 프로그램에서 사용할 수있는 특정 데이터가있는 경우 이것이 최선의 방법입니다. 그러나 특정 앱에 대한 구성이 있다면 그다지 많지 않습니다.
추신 : 그리고 이것에 JSON을 사용하지 마십시오. 가능한 최악의 아이디어입니다. :)
다른 환경을 고려할 때 이것이 내 구성을 처리하는 좋은 방법이라는 것을 알았습니다.
config.coffee
exports.setEnvironment = (env) ->
switch env
when "development"
exports.DEBUG_LOG = true
exports.DB_PORT = '27017'
# ...
when "testing"
exports.DEBUG_ERROR = true
exports.DEBUG_CLIENT = true
# ...
when "production"
exports.DEBUG_LOG = false
# ...
else console.log "environment #{env} not found"
server.coffee :
config = require('./config')
config.setEnvironment env
참고 URL : https://stackoverflow.com/questions/22348705/best-way-to-store-db-config-in-node-js-express-app
'ProgramingTip' 카테고리의 다른 글
file_put_contents () 실행시 폴더 생성 (0) | 2020.12.07 |
---|---|
ng-repeat : 객체 배열의 각에 대한 액세스 키 및 값 (0) | 2020.12.07 |
gradle.properties 파일을 위치 위치 (0) | 2020.12.07 |
Cloud Foundry와 Docker의 차이점은 무엇입니까? (0) | 2020.12.07 |
nodejs의 여러 도메인에 대한 Access-Control-Allow-Origin 활성화 (0) | 2020.12.06 |