Używam node.js + express.js + everyauth.js. Przeniosłem całą moją logikę everyauth do pliku modułu
var login = require('./lib/everyauthLogin');
wewnątrz tego ładuję mój plik konfiguracyjny OAuth z kombinacjami klucz / sekret:
var conf = require('./conf');
.....
twitter: {
consumerKey: 'ABC',
consumerSecret: '123'
}
Kody te są różne w różnych środowiskach - programowanie / przemieszczanie / produkcja, ponieważ wywołania zwrotne dotyczą różnych adresów URL.
Qu. Jak ustawić je w konfiguracji środowiskowej, aby filtrowały przez wszystkie moduły, czy mogę przekazać ścieżkę bezpośrednio do modułu?
Ustaw w środ .:
app.configure('development', function(){
app.set('configPath', './confLocal');
});
app.configure('production', function(){
app.set('configPath', './confProduction');
});
var conf = require(app.get('configPath'));
Przechodzą w
app.configure('production', function(){
var login = require('./lib/everyauthLogin', {configPath: './confProduction'});
});
? mam nadzieję, że to ma sens
Odpowiedzi:
Moje rozwiązanie,
załaduj aplikację za pomocą
Następnie skonfiguruj
config.js
jako funkcję, a nie obiektNastępnie, zgodnie z rozwiązaniem Jans, załaduj plik i utwórz nową instancję, którą w razie potrzeby moglibyśmy przekazać w wartości, w tym przypadku
process.env.NODE_ENV
jest ona globalna, więc nie jest potrzebna.Wtedy możemy uzyskać dostęp do właściwości obiektu konfiguracyjnego dokładnie tak, jak poprzednio
źródło
new
konieczne?new
. Robię to wconfig.js
....Config = function(){...}; module.exports = Config()
Możesz również mieć plik JSON z NODE_ENV jako najwyższym poziomem. IMO, jest to lepszy sposób wyrażania ustawień konfiguracyjnych (w przeciwieństwie do używania skryptu, który zwraca ustawienia).
Przykład dla env.json:
źródło
Bardzo przydatnym rozwiązaniem jest skorzystanie z modułu config .
po zainstalowaniu modułu:
Możesz utworzyć plik konfiguracyjny default.json . (możesz użyć obiektu JSON lub JS z rozszerzeniem .json5)
Na przykład
Ta domyślna konfiguracja może zostać zastąpiona przez plik konfiguracyjny środowiska lub lokalny plik konfiguracyjny dla lokalnego środowiska programistycznego:
production.json może być:
development.json może być:
Na lokalnym komputerze możesz mieć plik local.json, który przesłania całe środowisko, lub możesz mieć określoną konfigurację lokalną, taką jak local-production.json lub local-development.json .
Pełna lista zleceń załadunku .
Wewnątrz Twojej aplikacji
W swojej aplikacji potrzebujesz tylko konfiguracji i wymaganego atrybutu.
Załaduj aplikację
załaduj aplikację za pomocą:
lub ustawienie odpowiedniego środowiska za pomocą forever lub pm2
Na zawsze:
PM2 (przez powłokę):
PM2 (przez .json):
process.json
I wtedy
To rozwiązanie jest bardzo przejrzyste i ułatwia ustawianie różnych plików konfiguracyjnych dla środowiska produkcyjnego / przejściowego / programistycznego, a także ustawień lokalnych.
źródło
W skrócie
Taka konfiguracja jest prosta i elegancka:
env.json
common.js
app.js
Aby uruchomić w trybie produkcyjnym:
$ NODE_ENV=production node app.js
Szczegółowo
To rozwiązanie pochodzi z: http://himanshu.gilani.info/blog/2012/09/26/bootstraping-a-node-dot-js-app-for-dev-slash-prod-environment/ , sprawdź je więcej szczegółów.
źródło
Sposób, w jaki to robimy, polega na przekazaniu argumentu podczas uruchamiania aplikacji ze środowiskiem. Na przykład:
W app.js ładujemy następnie
dev.js
jako nasz plik konfiguracyjny. Możesz przeanalizować te opcje za pomocą optparse-js .Teraz masz kilka podstawowych modułów, które są zależne od tego pliku konfiguracyjnego. Kiedy piszesz je jako takie:
I możesz to nazwać w ten sposób
app.js
:źródło
app.configure('development
kodzie app.js , ale spróbuję sprawdzić, czy mogę użyć tego rozwiązania z tymEleganckim sposobem jest użycie
.env
pliku do lokalnego zastąpienia ustawień produkcyjnych. Nie ma potrzeby stosowania przełączników wiersza poleceń. Nie ma potrzeby stosowania tych wszystkich przecinków i nawiasów wconfig.json
pliku. Zobacz moją odpowiedź tutajPrzykład: na moim komputerze
.env
plik jest następujący:Moja lokalna
.env
przesłania wszelkie zmienne środowiskowe. Ale na serwerach pomostowych lub produkcyjnych (może są one na heroku.com) zmienne środowiskowe są wstępnie ustawione na etapNODE_ENV=stage
lub produkcjęNODE_ENV=prod
.źródło
ustaw zmienną środowiskową na serwerze wdrożeniowym (np. jak NODE_ENV = produkcja). Możesz uzyskać dostęp do zmiennej środowiskowej poprzez process.env.NODE_ENV. Znajdź następujący plik konfiguracyjny dla ustawień globalnych
base zawiera wspólną konfigurację dla wszystkich środowisk.
następnie zaimportuj do innych modułów, takich jak
Miłego kodowania ...
źródło
Co powiesz na zrobienie tego w znacznie bardziej elegancki sposób za pomocą nodejs-config .
Ten moduł jest w stanie ustawić środowisko konfiguracyjne na podstawie nazwy twojego komputera. Następnie, gdy zażądasz konfiguracji, otrzymasz wartość specyficzną dla środowiska.
Na przykład załóżmy, że masz dwie maszyny programistyczne o nazwach pc1 i pc2 oraz maszynę produkcyjną o nazwie pc3. Kiedykolwiek zażądasz wartości konfiguracyjnych w swoim kodzie na pc1 lub pc2, musisz uzyskać konfigurację środowiska "programistycznego", aw pc3 musisz otrzymać konfigurację środowiska "produkcyjnego". Można to osiągnąć w następujący sposób:
Teraz utwórz nową instancję konfiguracji z następującą składnią.
Teraz możesz uzyskać dowolną wartość konfiguracyjną bez martwienia się o środowisko w następujący sposób:
źródło
Ta odpowiedź nie jest czymś nowym. Jest podobny do tego, o czym wspomniał @andy_t. Ale używam poniższego wzoru z dwóch powodów.
Czysta implementacja bez zewnętrznych zależności npm
Scal domyślne ustawienia konfiguracji z ustawieniami opartymi na środowisku.
Implementacja JavaScript
Zwykle używam maszynopisu w moim projekcie węzła. Poniżej jest wklejona kopia mojej rzeczywistej implementacji.
Implementacja maszynopisu
źródło