Express 4.x에서“./bin/www”는 무엇입니까?


157

방금 Node.js 앱에서 Express 4.0에 대해 배우기 시작 ./bin/www했으며 응용 프로그램 서버 및 포트 설정 만 작성되고 미들웨어 및 라우팅과 같은 다른 모든 ./app.js파일이 파일에 정의되어있는 파일을 생성했습니다.

그러나 이것이 무엇을하는지 잘 모르겠습니다 ./bin/www. Express 3.x를 사용했으며 항상 동일한 ./app.js파일 에서 라우팅 및 미들웨어뿐만 아니라 서버 및 포트 설정을 정의 했으며로 노드 앱을 시작했습니다 node app.js. 그래서 사용하는 요점은 무엇 ./bin/www입니까? 서버와 포트 정의 만 다른 서버와 분리합니까?

현재 express-generator를 사용하여 패키지를 만들면 package.json다음과 같은 정의 가 포함됩니다.

"scripts": {
    "start": "node ./bin/www"
}

그러나, 나는 내 응용 프로그램을 사용하여 실행해야하는지 궁금 node ./bin/www하거나 npm start. 앱을 시작하려면 어떤 명령을 실행해야합니까?

또한 앱을 heroku에 배포 할 때 Procfile파일에 무엇을 작성해야 합니까? 가 web: node app.js충분?


답변:


131

에서 익스프레스 3.0 , 당신은 일반적으로 사용하는 것 app.configure()(또는 app.use()당신이 필요로 필요한 미들웨어를 설정). 지정한 미들웨어는 Express 3.0과 함께 번들로 제공됩니다.

예:

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.compress());
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());

그러나 Express 4.0 에서는 모든 미들웨어가 제거되어 핵심 Express (정적 미들웨어 제외)와 독립적으로 유지 보수 및 업데이트 될 수 있으므로 별도로 호출해야합니다 (에 표시된 내용 app.js).

bin/디렉토리는 당신이 당신의 다양한 정의 할 수있는 위치의 역할을 시작 스크립트 . 는 www웹 서버로 명시 응용 프로그램을 시작하는 예입니다.

궁극적으로, 당신은 같은 다른 스크립트를 가질 수있다 test, stop또는 restart등이 구조를 갖는로 모든 것을 주입식없이, 당신은 다른 시작 구성을 가질 수 있습니다 app.js.

Express 앱을 시작하는 올바른 방법은 다음과 같습니다.

npm start

Heroku에 Express 4.x 앱 을 배포하려면 다음에 추가하십시오 .Procfile

web: npm start

또는 당신이 당신의 시작 스크립트를 사용할 수 있는지 package.json, Heroku가 자동으로 그것을 사용하는 것, 더 읽어 여기에

"scripts": {
    "start": "node ./bin/www",
}

6
감사. 마지막 두 단락에 대한 훌륭한 설명으로 마침내을 사용하는 것이 중요합니다 www. 왜 그런 식으로 이름이 지어 졌는지 잘 모르겠습니다. 월드 와이드 웹의 이름을 따서 지어 졌습니까?
Blaszard

1
@ NicolasS.Xu ExpressJS의 Github 저장소 github.com/visionmedia/express 에서 빠른 시작 섹션
Andy

4
@Ved 왜 "빈"? 나는 바이너리 실행 파일과 연관시킵니다.
regularmike

2
@regularmike 필자가 생각하기에 리눅스 환경과 같은 '실행 가능'스크립트를 의미 할 수도있다
Andy

2
@Ved 예, 오래 전에 마치 실행 가능한 것을 의미하도록 진화 한 것 같습니다. 일반적으로 Python, Perl 및 unix / linux에서 공통입니다.
regularmike

10

Express 3.x와 같은 노드 앱은 비표준 시작 파일 app.js을 사용하지만 실행하기에 잘못된 파일입니다.

package.json 있다

   "scripts": {
     "start": "node ./bin/www"
   }

시작 명령 줄을 나타냅니다. 시작 파일에 대한 경로뿐만 아니라 전체 명령 행이 포함되어 있기 때문에 사소하지 않습니다.


이 질문에 대답 할 수 있습니까? 감사합니다!
Nicolas S.Xu

7
왜 빈이라고 불리는가? 바이너리가 포함되어 있지 않습니다. . .
Kinnard Hockenhull

2

당신이 명시 발전기를 사용하는 경우, 당신의 로컬 파일에서 보면 ./bin,이 www./bin의 파일 내부. node ./bin/www따라서을 실행 하면 node.js가 www파일 에서 코드를 실행 합니다. 멋진 것은 없습니다.


Azure 앱 서비스에 배포하는 경우 web.config를 만들고 모든 index.js를 bin / www로 바꾸어야
Bishoy Hanna

1

Windows에서는 다음 명령을 사용하십시오.

DEBUG = myapp : * & npm start를 설정 한 다음 브라우저에 http : // localhost : 3000 / 을 로드 하여 앱에 액세스하십시오.


4
SO에 오신 것을 환영합니다! 나는 이것이 실제로 질문에 대답하지 않는다고 생각합니다. 원본 포스터가 요구하는 모든 내용을 완전히 이해하려면 질문을 다시 읽으십시오.
Jake

0

위의 모든 것이 잘 대답했습니다. 그러나 node app.jsExpress 3. * 버전 만 사용하려는 경우 . 아래를 따라갈 수 있습니다 :

Express 4 생성기에 의해 생성 된 app.js 파일 은 이제 Node.js 모듈 이므로 코드를 수정하지 않는 한 더 이상 앱으로 독립적으로 시작할 수 없습니다. 모듈은 Node.js 파일에로드되고 Node.js 파일을 통해 시작되어야합니다. 이 경우 Node.js 파일은 ./bin/www입니다. 자세한 내용 은 공식 문서를 방문하십시오 .

bin 디렉토리 나 확장명이없는 www 파일은 Express 앱을 만들거나 앱을 시작하는 데 반드시 필요한 것은 아닙니다. 그것들은 단지 생성자가 제안한 것이므로 필요에 따라 자유롭게 수정하십시오.

www 디렉토리를 제거하고 "Express 3 way"를 유지하려면 module.exports = app; app.js 파일의 끝에서 다음 코드를 그 자리에 붙여 넣습니다.

app.set('port', process.env.PORT || 3000)

app.listen(app.get('port'), () => {
  console.log(`Express server listening on port ${app.get('port')}`);
})

다음으로, 변화 "start": "node ./bin/www"package.json의 파일. 이제 ./bin/www 의 기능을 app.js로 다시 이동했습니다. 이제 "start": "node app.js"Express 앱을 실행하는 데 사용하십시오.


-1

이것을 Procfile에 넣고 web: node ./bin/www 작동하는지 확인하십시오 foreman start. 포트 5000에서 앱을 사용할 수 있어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.