Ini adalah aplikasi saya, saya sedang menjalankan produksi.
var app = express();
app.set('views',settings.c.WEB_PATH + '/public/templates');
app.set('view engine','ejs');
app.configure(function(){
app.use(express.favicon());
app.use(express.static(settings.c.WEB_PATH + '/public'));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.methodOverride());
app.use(express.session({
cookie:{ domain:"."+settings.c.SITE_DOMAIN, maxAge:1440009999},
secret:'hamster',
store: r_store,
}));
app.use(useragent.express());
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
});
Namun, saya jadi tahu NODE_ENV
dan ingin menggunakannya. Bagaimana saya bisa melakukan ini?
javascript
node.js
express
TIMEX
sumber
sumber
app.configure('development', ...)
atau "produksi" untuk menetapkan pengaturan tertentu hanya untuk pengembangan atau lingkungan produksi. Lihat expressjs.com/api.html#app.configureJawaban:
NODE_ENV
adalah variabel lingkungan yang dipopulerkan oleh kerangka kerja server web ekspres . Ketika aplikasi node dijalankan, ia dapat memeriksa nilai variabel lingkungan dan melakukan hal-hal yang berbeda berdasarkan nilai tersebut.NODE_ENV
secara khusus digunakan (dengan konvensi) untuk menyatakan apakah suatu lingkungan tertentu adalah produksi atau lingkungan pengembangan . Kasing yang umum digunakan adalah menjalankan kode debugging atau logging tambahan jika berjalan di lingkungan pengembangan.Mengakses NODE_ENV
Anda dapat menggunakan kode berikut untuk mengakses variabel lingkungan sendiri sehingga Anda dapat melakukan pemeriksaan dan logika Anda sendiri:
var environment = process.env.NODE_ENV
Atau sebagai alternatif menggunakan express '
app.get('env')
( catatan: defaultnya adalah"development"
)Ketahuilah bahwa jika Anda belum menetapkan secara eksplisit
NODE_ENV
untuk lingkungan Anda, itu akan terjadiundefined
.Pengaturan NODE_ENV
Bagaimana sebenarnya mengatur variabel lingkungan bervariasi dari sistem operasi ke sistem operasi, dan juga tergantung pada pengaturan pengguna Anda.
Jika Anda ingin mengatur variabel lingkungan sebagai satu kali, Anda dapat melakukannya dari baris perintah:
export NODE_ENV=production
$env:NODE_ENV = 'production'
Dalam jangka panjang Anda harus bertahan ini sehingga tidak disetel jika Anda reboot - daripada mendaftar semua metode yang mungkin untuk melakukan ini, saya akan membiarkan Anda mencari cara melakukannya sendiri!
Konvensi telah menentukan bahwa hanya ada dua nilai yang harus Anda gunakan untuk
NODE_ENV
, baikproduction
ataudevelopment
, semua huruf kecil. Tidak ada yang menghentikan Anda menambahkan lebih banyak nilai, tetapi mungkin itu bukan ide yang baik, karena saya melihat banyak kode semacam ini di banyak node_modules yang saya gunakan:Perhatikan bahwa ini adalah ide yang sangat buruk untuk mencoba mengatur
NODE_ENV
dari dalam aplikasi simpul itu sendiri - jika Anda melakukannya hanya akan berlaku untuk proses dari mana itu ditetapkan , sehingga hal-hal yang mungkin tidak akan berfungsi seperti yang Anda harapkan. Jangan lakukan itu - Anda akan menyesalinya.sumber
app.configure()
telah dihapus. The Express bintang 4 panduan migrasi menyarankan untuk "penggunaanprocess.env.NODE_ENV
atauapp.get('env')
untuk mendeteksi lingkungan dan mengkonfigurasi aplikasi yang sesuai."app.get('env')
untuk alasan itu. Ini menutupi bahwa variabel penting ini tidak diatur - membuat hal-hal tampak tidak konsisten ketika Anda mengaksesnya dari luar express. Lebih lanjut saya pikir itu kurang berbahaya untuk memiliki kode debug secara tidak sengaja tidak berjalan pada lingkungan pengembangan daripada harus secara tidak sengaja berjalan pada lingkungan produksi.development
yang - antara lain - berarti templat akan diproses ulang untuk setiap permintaan. Konsekuensinya adalah keuntungan atau tiriskan kinerja ~ 75% antara produksi dan pengembangan saat menggunakan Jade. Saya juga telah membuat posting blog di apmblog.dynatrace.com/2015/07/22/...NODE_ENV adalah variabel lingkungan yang mewakili lingkungan simpul di server ekspres.
Begitulah cara kami mengatur dan mendeteksi di lingkungan mana kita berada.
Ini sangat umum menggunakan
production
dandevelopment
.Set:
Dapatkan:
Anda bisa menggunakannya
app.get('env')
sumber
Saya menganggap pertanyaan awal termasuk bagaimana cara Express menggunakan variabel lingkungan ini.
Express menggunakan NODE_ENV untuk mengubah perilaku default sendiri. Misalnya, dalam mode pengembangan, penangan kesalahan default akan mengirim kembali stacktrace ke browser. Dalam mode produksi, responsnya sederhana
Internal Server Error
, untuk menghindari bocornya detail implementasi ke dunia.sumber
Biasanya, Anda akan menggunakan
NODE_ENV
variabel untuk mengambil tindakan khusus ketika Anda mengembangkan, menguji dan men-debug kode Anda. Misalnya untuk menghasilkan keluaran pendataan dan debug terperinci yang tidak Anda inginkan dalam produksi. Ekspres sendiri berperilaku berbeda tergantung pada apakahNODE_ENV
diaturproduction
atau tidak. Anda dapat melihat ini jika Anda meletakkan baris ini di aplikasi Express, dan kemudian membuat permintaan HTTP GET ke/error
:Perhatikan bahwa yang terakhir
app.use()
harus menjadi yang terakhir, setelah semua penangan metode lainnya!Jika Anda mengatur
NODE_ENV
untukproduction
sebelum Anda mulai server Anda, dan kemudian mengirimGET /error
permintaan untuk itu, Anda tidak akan melihat teksForcing an error!
di konsol, dan respon tidak boleh mengandung setumpuk jejak dalam tubuh HTML (yang asal dari Express). Sebaliknya, jika Anda mengaturNODE_ENV
ke hal lain sebelum memulai server Anda, yang terjadi adalah sebaliknya.Di Linux, atur variabel lingkungan NODE_ENV seperti ini:
sumber