Node.js 인증마다 사용할 환경별 구성 설정
node.js + express.js + everyauth.js를 사용하고 있습니다.모든 인증 로직을 모듈 파일로 이동했습니다.
var login = require('./lib/everyauthLogin');
키/비밀 조합이 포함된 myoAuth 구성 파일을 로드합니다.
var conf = require('./conf');
.....
twitter: {
consumerKey: 'ABC',
consumerSecret: '123'
}
이러한 코드는 개발/스테이징/제작 환경에 따라 다릅니다. 콜백은 URL이 다르기 때문입니다.
질문:환경 구성에서 모든 모듈을 필터링하도록 설정하려면 어떻게 해야 합니까? 아니면 경로를 모듈로 직접 전달할 수 있습니까?
env에서 설정:
app.configure('development', function(){
app.set('configPath', './confLocal');
});
app.configure('production', function(){
app.set('configPath', './confProduction');
});
var conf = require(app.get('configPath'));
전달
app.configure('production', function(){
var login = require('./lib/everyauthLogin', {configPath: './confProduction'});
});
이치에 맞는 희망
내 해결책은,
를 사용하여 앱 로드
NODE_ENV=production node app.js
다음 음다설정을 설정합니다.config.js
로서.
module.exports = function(){
switch(process.env.NODE_ENV){
case 'development':
return {dev setting};
case 'production':
return {prod settings};
default:
return {error or other settings};
}
};
경우 할 수 새 합니다. 이에는 "Jans"와 "Jans"가 있습니다.process.env.NODE_ENV
글로벌이므로 필요하지 않습니다.
var Config = require('./conf'),
conf = new Config();
그러면 이전과 동일하게 구성 개체 속성에 액세스할 수 있습니다.
conf.twitter.consumerKey
또한 NODE_ENV가 최상위 수준인 JSON 파일을 가질 수도 있습니다.IMO, 이것은 설정을 반환하는 스크립트를 사용하는 것과 달리 구성 설정을 표현하는 더 나은 방법입니다.
var config = require('./env.json')[process.env.NODE_ENV || 'development'];
env.json의 예:
{
"development": {
"MONGO_URI": "mongodb://localhost/test",
"MONGO_OPTIONS": { "db": { "safe": true } }
},
"production": {
"MONGO_URI": "mongodb://localhost/production",
"MONGO_OPTIONS": { "db": { "safe": true } }
}
}
매우 유용한 솔루션은 구성 모듈을 사용하는 것입니다.
모듈 설치 후:
$ npm install config
default.json 구성 파일을 생성할 수 있습니다.(확장자 .json5를 사용하여 JSON 또는 JS 개체를 사용할 수 있습니다.)
예를들면
$ vi config/default.json
{
"name": "My App Name",
"configPath": "/my/default/path",
"port": 3000
}
이 기본 구성은 환경 구성 파일 또는 로컬 개발 환경의 로컬 구성 파일에 의해 재정의될 수 있습니다.
production.json은 다음과 같습니다.
{
"configPath": "/my/production/path",
"port": 8080
}
development.json은 다음과 같습니다.
{
"configPath": "/my/development/path",
"port": 8081
}
로컬 PC에서 모든 환경을 재정의하는 local.json을 사용하거나 local-production.json 또는 local-development.json으로 특정 로컬 구성을 사용할 수 있습니다.
앱 내부
앱에서는 구성과 필요한 속성만 필요합니다.
var conf = require('config'); // it loads the right file
var login = require('./lib/everyauthLogin', {configPath: conf.get('configPath'));
앱 로드
다음을 사용하여 앱 로드:
NODE_ENV=production node app.js
또는 forever 또는 pm2로 올바른 환경 설정
영원히:
NODE_ENV=production forever [flags] start app.js [app_flags]
PM2(쉘을 통해):
export NODE_ENV=staging
pm2 start app.js
PM2(.json 경유):
프로세스.json
{
"apps" : [{
"name": "My App",
"script": "worker.js",
"env": {
"NODE_ENV": "development",
},
"env_production" : {
"NODE_ENV": "production"
}
}]
}
그리고 나서.
$ pm2 start process.json --env production
이 솔루션은 매우 깔끔하며 프로덕션/스테이지/개발 환경과 로컬 설정을 위한 다양한 구성 파일을 쉽게 설정할 수 있습니다.
요컨대
이러한 종류의 설정은 간단하고 우아합니다.
env.json
{
"development": {
"facebook_app_id": "facebook_dummy_dev_app_id",
"facebook_app_secret": "facebook_dummy_dev_app_secret",
},
"production": {
"facebook_app_id": "facebook_dummy_prod_app_id",
"facebook_app_secret": "facebook_dummy_prod_app_secret",
}
}
보통.js
var env = require('env.json');
exports.config = function() {
var node_env = process.env.NODE_ENV || 'development';
return env[node_env];
};
app.js
var common = require('./routes/common')
var config = common.config();
var facebook_app_id = config.facebook_app_id;
// do something with facebook_app_id
프로덕션 모드에서 실행하기 $ NODE_ENV=production node app.js
상세
이 솔루션은 다음과 같습니다. http://himanshu.gilani.info/blog/2012/09/26/bootstraping-a-node-dot-js-app-for-dev-slash-prod-environment/, 에서 자세한 내용을 확인하십시오.
이렇게 하는 방법은 환경에서 앱을 시작할 때 인수를 전달하는 것입니다.예를 들어:
node app.js -c dev
app.에서 app.js 파일을 합니다.dev.js
구성 파일로 사용할 수 있습니다.이러한 옵션은 optparse-js를 사용하여 구문 분석할 수 있습니다.
이제 이 구성 파일에 의존하는 몇 가지 핵심 모듈이 있습니다.다음과 같이 적을 때:
var Workspace = module.exports = function(config) {
if (config) {
// do something;
}
}
(function () {
this.methodOnWorkspace = function () {
};
}).call(Workspace.prototype);
그리고 당신은 그것을 부를 수 있습니다.app.js
예:
var Workspace = require("workspace");
this.workspace = new Workspace(config);
우아한 방법은 사용하는 것입니다..env
로컬로 프로덕션 설정을 재정의하는 파일입니다.명령줄 스위치가 필요하지 않습니다.모든 쉼표와 대괄호가 필요 없습니다.config.json
파일. 여기 제 대답을 보세요.
내에서 ": 내컴터에서퓨".env
파일:
NODE_ENV=dev
TWITTER_AUTH_TOKEN=something-needed-for-api-calls
의 지역 내컬로.env
모든 환경 변수를 재정의합니다. 또는 서버.com 에 수 가 stage로 사전 됩니다.NODE_ENV=stage
생산 또는산생.NODE_ENV=prod
.
배포 서버에 환경 변수를 설정합니다(예: NODE_ENV=production).process.env를 통해 환경 변수에 액세스할 수 있습니다.NODE_ENV.글로벌 설정에 대한 다음 구성 파일 찾기
const env = process.env.NODE_ENV || "development"
const configs = {
base: {
env,
host: '0.0.0.0',
port: 3000,
dbPort: 3306,
secret: "secretKey for sessions",
dialect: 'mysql',
issuer : 'Mysoft corp',
subject : 'some@user.com',
},
development: {
port: 3000,
dbUser: 'root',
dbPassword: 'root',
},
smoke: {
port: 3000,
dbUser: 'root',
},
integration: {
port: 3000,
dbUser: 'root',
},
production: {
port: 3000,
dbUser: 'root',
}
};
const config = Object.assign(configs.base, configs[env]);
module.exports= config;
"base"에는 모든 환경에 대한 공통 구성이 포함되어 있습니다.
그런 다음 다음과 같은 다른 모듈로 가져옵니다.
const config = require('path/to/config.js')
console.log(config.port)
해피 코딩...
nodejs-config 모듈을 사용하여 훨씬 더 우아한 방식으로 이 작업을 수행하는 것은 어떻습니까?
이 모듈은 컴퓨터 이름에 따라 구성 환경을 설정할 수 있습니다.그런 다음 구성을 요청하면 환경별 값을 얻을 수 있습니다.
예를 들어 pc1과 pc2라는 두 개의 개발 시스템과 pc3라는 운영 시스템이 있다고 가정합니다.pc1 또는 pc2에서 코드에 구성 값을 요청할 때마다 "개발" 환경 구성을 받아야 하며 pc3에서는 "운영" 환경 구성을 받아야 합니다.이는 다음과 같이 달성할 수 있습니다.
- 구성 디렉터리에 기본 구성 파일을 생성합니다. "app.json"이라고 말하고 필요한 구성을 추가합니다.
- 이제 환경 이름(이 경우 "개발" 및 "운영")과 일치하는 폴더를 구성 디렉터리에 생성하기만 하면 됩니다.
- 그런 다음 재정의할 구성 파일을 생성하고 환경 디렉토리에서 각 환경에 대한 옵션을 지정합니다(기본 구성 파일에 있는 모든 옵션을 지정할 필요는 없고 재정의하려는 옵션만 지정해야 함).환경 구성 파일은 기본 파일을 "캐스케이드"합니다.
이제 다음 구문을 사용하여 새 구성 인스턴스를 만듭니다.
var config = require('nodejs-config')(
__dirname, // an absolute path to your applications 'config' directory
{
development: ["pc1", "pc2"],
production: ["pc3"],
}
);
이제 다음과 같은 환경에 대한 걱정 없이 모든 구성 값을 얻을 수 있습니다.
config.get('app').configurationKey;
이 대답은 새로운 것이 아닙니다.@andy_t가 언급한 것과 유사합니다.하지만 저는 두 가지 이유로 아래의 패턴을 사용합니다.
외부 npm 종속성이 없는 깔끔한 구현
기본 구성 설정을 환경 기반 설정과 병합합니다.
자바스크립트 구현
const settings = {
_default: {
timeout: 100
baseUrl: "http://some.api/",
},
production: {
baseUrl: "http://some.prod.api/",
},
}
// If you are not using ECMAScript 2018 Standard
// https://stackoverflow.com/a/171256/1251350
module.exports = { ...settings._default, ...settings[process.env.NODE_ENV] }
저는 주로 노드 프로젝트에서 유형 스크립트를 사용합니다.다음은 실제 구현을 복사하여 붙여넣은 것입니다.
유형 스크립트 구현
const settings: { default: ISettings, production: any } = {
_default: {
timeout: 100,
baseUrl: "",
},
production: {
baseUrl: "",
},
}
export interface ISettings {
baseUrl: string
}
export const config = ({ ...settings._default, ...settings[process.env.NODE_ENV] } as ISettings)
언급URL : https://stackoverflow.com/questions/8332333/node-js-setting-up-environment-specific-configs-to-be-used-with-everyauth
'programing' 카테고리의 다른 글
jQuery를 사용하여 텍스트 영역 자동 확장 (0) | 2023.08.20 |
---|---|
MySQL 워크벤치 대 phpMyAdmin (0) | 2023.07.31 |
jQuery 템플릿 엔진 (0) | 2023.07.31 |
사용자 지정 이니셜라이저가 있는 Swift 열거형은 rawValue 이니셜라이저를 잃게 됩니다. (0) | 2023.07.31 |
Oracle Forms 6i에서 웹으로 마이그레이션하는 데 가장 적합한 솔루션은 무엇입니까? (0) | 2023.07.31 |