[javascript] NODE_ENV 란 무엇이며 Express에서 사용하는 방법은 무엇입니까?

이것은 내 응용 프로그램이며 현재 프로덕션에서 실행 중입니다.

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());
});

그러나 나는 그것을 알고 NODE_ENV사용하고 싶었습니다. 어떻게해야합니까?



답변

NODE_ENV입니다 환경 변수 에 의해 대중에게 명시 웹 서버 프레임 워크. 노드 응용 프로그램이 실행될 때 환경 변수의 값을 확인하고 값에 따라 다른 작업을 수행 할 수 있습니다. NODE_ENV구체적으로는, 특정 환경에 있는지 상태 (일반적으로)를 사용하고 생산 또는 개발 환경. 일반적인 사용 사례는 개발 환경에서 실행중인 경우 추가 디버깅 또는 로깅 코드를 실행하는 것입니다.

NODE_ENV에 액세스

다음 코드를 사용하여 환경 변수에 직접 액세스하여 자체 검사 및 논리를 수행 할 수 있습니다.

var environment = process.env.NODE_ENV

또는 대안으로 express ‘를 사용 하십시오app.get('env') ( 참고 : 이 기본값은 "development")

NODE_ENV환경에 대해 명시 적으로 설정하지 않은 경우이 설정 이됩니다 undefined.

NODE_ENV 설정

실제로 환경 변수를 설정하는 방법은 운영 체제마다 다르며 사용자 설정에 따라 다릅니다.

환경 변수를 일회용으로 설정하려면 명령 행에서 수행 할 수 있습니다.

  • 리눅스 & 맥 :export NODE_ENV=production
  • :$env:NODE_ENV = 'production'

장기적으로는 재부팅 할 때 설정이 해제되지 않도록이를 유지해야합니다.이를 수행 할 수있는 모든 가능한 방법을 나열하는 대신 직접 수행하는 방법을 검색하도록하겠습니다!

컨벤션에 따르면 NODE_ENV, production또는 development모두 소문자로 사용해야하는 값은 두 개뿐입니다 . 더 많은 값을 추가하는 것을 막을 수는 없지만, 내가 사용하는 많은 node_modules에서 이러한 종류의 코드를 많이 볼 때 좋은 생각은 아닙니다.

var development = process.env.NODE_ENV !== 'production';

그것이 있다고 주 정말 나쁜 세트에 시도하는 생각 NODE_ENV에서 노드 응용 프로그램 자체 당신이 할 할 경우 – 에만이 설정되는 과정에 적용되는 상황이 아마 작업 당신이 그들에 기대하는 것 같은. 하지 마십시오. 후회하게됩니다.


답변

NODE_ENV노드 환경 을 나타내는 환경 변수입니다 Express 서버의 을 나타내는 .

우리가 어떤 환경에 있는지 설정하고 감지하는 방법입니다.

사용하는 것이 매우 일반적 production이며development 입니다.

세트:

export NODE_ENV=production

가져 오기:

당신은 그것을 사용하여 얻을 수 있습니다 app.get('env')


답변

원래 질문에 Express가이 환경 변수를 사용하는 방법이 포함되어 있다고 가정합니다.

Express는 NODE_ENV를 사용하여 자체 기본 동작을 변경합니다. 예를 들어, 개발 모드에서 기본 오류 처리기는 스택 추적을 브라우저로 다시 보냅니다. 프로덕션 모드에서는 Internal Server Error구현 세부 정보가 세상에 유출되는 것을 피하기 위해 간단히 응답 합니다.


답변

일반적으로 NODE_ENV코드를 개발, 테스트 및 디버깅 할 때 변수를 사용하여 특별한 조치를 취합니다. 예를 들어 프로덕션에서 원하지 않는 자세한 로깅 및 디버그 출력을 생성합니다. Express의 NODE_ENV설정 여부에 따라 Express 자체가 다르게 작동합니다 production. 이 행을 Express 앱에 넣고 HTTP GET 요청을하면 다음을 볼 수 있습니다 /error.

app.get('/error', function(req, res) {
  if ('production' !== app.get('env')) {
    console.log("Forcing an error!");
  }
  throw new Error('TestError');
});

app.use(function (req, res, next) {
  res.status(501).send("Error!")
})

후자 app.use()는 다른 모든 메소드 핸들러 다음에 마지막이어야합니다!

사용자가 설정 한 경우 NODE_ENVproduction당신은 당신의 서버를 시작하고 보내기 전에 GET /error그것에 요청을, 당신은 텍스트 표시 안 Forcing an error!콘솔에서, 그리고 응답은 (익스프레스로부터의 기원) HTML 본문에서 스택 추적을 포함 할 수 없습니다. 대신에NODE_ENV 서버를 시작하기 전에 다른 것으로 하면 반대의 상황이 발생합니다.

Linux에서 환경 변수 NODE_ENV를 다음과 같이 설정하십시오.

NODE_ENV = ‘ value ‘ 내보내기


답변