Node. js 를 사용하여 간단한 웹 서버

I want to 실행하십시오 아주 단순해졌습니다 HTTP 서버. 하지만 'example.com' 모든 요청을 확보하십시오 받아야 하는 역할을 했다 'index. html' 은 일반 HTML 페이지 (즉, 일반 웹 페이지를 읽을 때와 동일한 경험을).

아래 코드를 사용하여 컨텐트에서 index. html '' 내가 읽을 수 있습니다. '일반' 으로 경배하되 index. html 웹 페이지를 어떻게 합니까?

var http = require('http');
var fs = require('fs');
var index = fs.readFileSync('index.html');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end(index);
}).listen(9615);

아래는 제가 한 가지 의견이 제시되었습니다 복잡하고 单捞磐啊 쓸 수 있도록 행을 각 리소스에는 (CSS, 자바스크립트, 이미지 파일) '' I want to use.

단일 페이지 (html, css, 자바스크립트를 경배하되 일부 이미지가 어떻게 해야 합니까?

질문에 대한 의견 (7)

사용할 수 있습니다. 접속하십시오세르베스태틱 와 node. js 엔드입니다:

  1. 설치 및 정적임 경배하되 접속하십시오 고궁박물원 함께

$ 고궁박물원 정적임 경배하되 접속하십시오 설치

  1. 파일 작성 세르베리에스 대체하십시오 내용:

var (& # 39, connect& # 39;) = 접속하십시오 합니다. (# 39, & # 39, serve-static&) = var 세르베스태틱 합니다. 리우스 접속하십시오 () (세르베스태틱 (_dirname) 트리스탕 (8080, 함수 () { 콘솔드로그 (& # 39, 실행되는 서버 8080.& # 39;). }).

  1. Run with node. js

$ 노드입니다 세르베리에스

이제 http://localhost:8080/yourfile.html gnu. orghttp://www. ''

해설 (13)

그냥 간단한 node. js 서버가.

$ npm install http-server -g

이제 서버를 통해 실행하십시오 명령은 다음과 같습니다.

$ cd MyApp

$ http-server

39 you& 사용하는 경우, re 고궁박물원 5.2.0 http 서버 '이상' 이 '와' 노프스 설치하지 않고 사용할 수 있습니다. # 39 에서 사용할 수 있지만, 이 t 권장됨 isn& 빨리 로컬호스트 실행되는 서버 운영 좋은 방법입니다.

$ npx http-server

이 열 수 있는 웹 브라우저를 통해 고르 요청률 또는 볼 수 있습니다.

$ http-server -o --cors

자세한 옵션, 체크아웃합니다 설명서 '에서' http 서버 깃허브, 또는 실행:

$ http-server --help

많은 다른 좋은 기능 및 뇌 죽은입니다 단순해졌습니다 구축 노데지츠.

    • 기능 포크

물론 자신의 이름으로 포크하지 상단형 백업하도록 기능을 쉽게 할 수 있습니다. # 39 에 이미 수행됨 it& 얻을 수도 있습니다 한 기존 800+ 포크 이 프로젝트:

'좋은 대안을 http 서버' 가 ['표시등으로 서버'] (https://www.npmjs.com/package/light-server). 파일 보고 자동 고침 및 기타 여러 가지 기능을 사용할 수 있습니다.

$ npm install -g light-server 
$ light-server
  • Windows explorer*를 메뉴에 추가할 디렉터리입니다 컨텍스트로
 reg.exe add HKCR\Directory\shell\LightServer\command /ve /t REG_EXPAND_SZ /f /d "\"C:\nodejs\light-server.cmd\" \"-o\" \"-s\" \"%V\""
  • 간단한 JSON 미삭 서버 *

간단한 미삭 server 에 시제품을 만드는 데 필요한 경우 다음 [json 서버] 프로젝트 (https://github.com/typicode/json-server) 을 사용할 수 있습니다 어떤 you& # 39, re 찾고 있습니다.

  • 자동 고침 편집자 *

현재 대부분의 웹 페이지를 볼 수 있는 IDE 툴과도 포함시키십시오 편집자 및 웹 서버 소스 파일에 및 자동 갱신 때 웹 페이지에 변했다니까

내가 사용하는 [라이브 서버] (https://marketplace.visualstudio.com/items? itemName = 리트윅디트리베세르베르) 와 Visual Studio 코드입니다.

오픈 소스브래킷에 노데지스 정적 웹 서버 텍스트 편집기를 수 있습니다. 그냥 Preview&quo , 라이브입니다 에서 HTML 파일을 열지 브래킷에 &quot 누릅니다. 정적 페이지 브라우저에 시작될 및 서버 및 열립니다. 자동 갱신 때마다 브라우저는 HTML 파일을 편집하고 저장한 것이다. 이 적응형 웹 사이트 테스트할 때 유용합니다. 여러 브라우저는 HTML 페이지의 / 윈도우 sizes/devices 엽니다. 먹이좀 HTML 페이지 및 적응 중인 경우 그 즉시 확인할 때 모든 자동 갱신.

  • 폰갭 개발자 *

39 you& 경우, re 코딩하기 [하이브리드 모바일 애플리케이션 (앱)] [4], [폰갭] 하는 것을 알 수 있습니다. 5 가 있는 보드에서의 그들의 새로운 개념을 고객팀에 이 자동 재생율에서 폰갭 app. 이는 일반 모바일 애플리케이션 (앱) 개발 중에 있는 html5 를 서버에서 파일을 로드할 수 있습니다. 이것은 매우 슬릭 / 배포할 수 있는 단계를 개발 주기가 느린 만큼 이제 트릭 건너뛰십시오 컴파일하십시오 you& # 39 의 하이브리드 모바일 앱 / CSS / HTML 파일을 변경할 경우, re, re - JS you& 하고 어떤 이는 대부분 # 39 시간입니다. 또한 웹 서버 (실행하십시오 경배하되 '폰갭') 가 제공하십시오 정적임 노데지스 탐지합니다 파일 변경.

    • 엽차 폰갭 + 터치 개발자

39 를 고려하지 않는 정적 서버, ve 이제 i& 광범위하게 폰갭 &amp. 폰갭 개발자 앱으로 엽차 터치 &amp. jQuery 모바일 개발자. 체크아웃합니다 dell. 엽차 터치 라이브입니다. Qr 코드를 통해 해당 프록시 서버 및 - 로카르투넬 汲摹窍妨绰 - qr 너회의 정적임 데스크탑 컴퓨터는 URL 에 방화벽 외부의! T 는. 하이브리드 벽돌이날아와 속도 향상을 위한 모바일 devs.

  • 코르도바 + 이온 레임워크 개발자 *

자동 고침 기능은 로컬 서버 및 이온 '' 베이크드 꽂으십시오 목석같은놈. '에서' 이오니아 도망쳐야해 경배하되 앱 폴더. 더 좋다. ['-' 이오니아 실습에서는 경배하되] (http://blog.ionic.io/ionic-lab/) 를 모두 보기 자동 고침 나란히 보기입니다 ios 와 안드로이드.

[4]: http://en.wikipedia.org/wiki/HTML5_in_mobile_devices # Hybrid_Mobile_Apps

해설 (7)

체크아웃하려고 이 [사진을] (https://gist.github.com/701407). 참고로, 그러나, 여기에 i& # 39 m 은 꾸준히 업데이트되도록 사진을 소개한다.

&gt. 정적임 node. js 파일을 웹 서버. Put it in your 경로를 볼지옥으로 백업하도록 서버 믿지아니하며 디렉터리인 는 옵션임 포트 인수.

var http = require("http"),
    url = require("url"),
    path = require("path"),
    fs = require("fs"),
    port = process.argv[2] || 8888;

http.createServer(function(request, response) {

  var uri = url.parse(request.url).pathname
    , filename = path.join(process.cwd(), uri);

  fs.exists(filename, function(exists) {
    if(!exists) {
      response.writeHead(404, {"Content-Type": "text/plain"});
      response.write("404 Not Found\n");
      response.end();
      return;
    }

    if (fs.statSync(filename).isDirectory()) filename += '/index.html';

    fs.readFile(filename, "binary", function(err, file) {
      if(err) {        
        response.writeHead(500, {"Content-Type": "text/plain"});
        response.write(err + "\n");
        response.end();
        return;
      }

      response.writeHead(200);
      response.write(file, "binary");
      response.end();
    });
  });
}).listen(parseInt(port, 10));

console.log("Static file server running at\n  => http://localhost:" + port + "/\nCTRL + C to shutdown");
  • 업데이트 *

Css, js 파일을 처리하십니까 높여줍니까 골자다. # 39, ve i& qopenmp 말야 읽기 / 쓰기 &quot 사용하여 binary"; # 39 isn& 모드, t 문제다. # 39, 텍스트 파일 isn& 해석할 수 있다는 것을 그냥 t 에서 파일 라이브러리 및 무관한 반환되었습니다 콘텐트 유형 중 응답.

이 코드는 you& # 39 의 반환 문제가 항상 콘텐트 유형, re text/plain&quot ";). 위의 코드는 전혀 반환하지 않는 경우, re 그냥 # 39 신앙이니라 you& 콘텐트 유형, HTML, CSS 및 JS, 추론할 수 있는 그 사용하여 있지만브라우저에 그냥 그랬다고. 컨텐츠 유형에 잘못된 one. 없는 것보다 낫다

콘텐트 유형 () 는 일반적으로 해당 웹 서버 구성. 그래서 이 문제를 해결할 수 있는 경우, I& # 39 m, t # 39 정말 doesn& your 있지만, 일부 다른 사람을 받아들이는 단순한 개발 서버 및 돌아보 가져다줄래요 협력했습니다 것이 도움이 됩니다. 올바른 컨텐츠 유형 인컨텍스트 명시적으로 정의할 필요가 있는 경우 대응 할 수 있는 합리적인 설정값으로 접속하십시오 라리브러리 그것을비유하사 솔리드로 조이스비들 또는 사용할 수 있다. # 39 에 대해서 이 없는 훌륭한 it& 간편하고 일체형 (no 종속물).

그러나 나는한다 feel your 배정됩니다. 여기서는 통합 솔루션으로.

var http = require("http"),
    url = require("url"),
    path = require("path"),
    fs = require("fs")
    port = process.argv[2] || 8888;

http.createServer(function(request, response) {

  var uri = url.parse(request.url).pathname
    , filename = path.join(process.cwd(), uri);

  var contentTypesByExtension = {
    '.html': "text/html",
    '.css':  "text/css",
    '.js':   "text/javascript"
  };

  fs.exists(filename, function(exists) {
    if(!exists) {
      response.writeHead(404, {"Content-Type": "text/plain"});
      response.write("404 Not Found\n");
      response.end();
      return;
    }

    if (fs.statSync(filename).isDirectory()) filename += '/index.html';

    fs.readFile(filename, "binary", function(err, file) {
      if(err) {        
        response.writeHead(500, {"Content-Type": "text/plain"});
        response.write(err + "\n");
        response.end();
        return;
      }

      var headers = {};
      var contentType = contentTypesByExtension[path.extname(filename)];
      if (contentType) headers["Content-Type"] = contentType;
      response.writeHead(200, headers);
      response.write(file, "binary");
      response.end();
    });
  });
}).listen(parseInt(port, 10));

console.log("Static file server running at\n  => http://localhost:" + port + "/\nCTRL + C to shutdown");
해설 (8)

39, t need 익스플레스 don& 있습니다. # 39, 너회가 don& 연결할 필요가 없다. Http node. js 는 기본적으로. All you need to do 는 파일 종속적임 반환 요청.

var http = require('http')
var url = require('url')
var fs = require('fs')

http.createServer(function (request, response) {
    var requestUrl = url.parse(request.url)    
    response.writeHead(200)
    fs.createReadStream(requestUrl.pathname).pipe(response)  // do NOT use fs's sync methods ANYWHERE on production (e.g readFileSync) 
}).listen(9615)    

예를 들어 a, t # 39 더 보장하는 can& 요청률 전체 파일을 액세스하며 기본 디렉터리 않으며, 그 이벤트수정적절한 오류 처리:

var http = require('http')
var url = require('url')
var fs = require('fs')
var path = require('path')
var baseDirectory = __dirname   // or whatever base directory you want

var port = 9615

http.createServer(function (request, response) {
    try {
        var requestUrl = url.parse(request.url)

        // need to use path.normalize so people can't access directories underneath baseDirectory
        var fsPath = baseDirectory+path.normalize(requestUrl.pathname)

        var fileStream = fs.createReadStream(fsPath)
        fileStream.pipe(response)
        fileStream.on('open', function() {
             response.writeHead(200)
        })
        fileStream.on('error',function(e) {
             response.writeHead(404)     // assume the file doesn't exist
             response.end()
        })
   } catch(e) {
        response.writeHead(500)
        response.end()     // end the response so browsers don't hang
        console.log(e.stack)
   }
}).listen(port)

console.log("listening on port "+port)
해설 (18)

내 생각에는, re, re 에로남이네 you& 누각되었습니다 부품 you& # 39 지금 # 39 보내기:

Content-Type: text/plain

이 HTML 웹 브라우저를 스케쳐내 렌더링합니다 변경해야 합니다.

Content-Type: text/html
해설 (3)

Step1 (δ1 명령 프롬프트 [바래요 cd 데이터베이스에구성원을 폴더에서는]): '고궁박물원 설치처 익스플레스'

2 단계: 세르베리에스 파일을 만듭니다.

var fs = require("fs");
var host = "127.0.0.1";
var port = 1337;
var express = require("express");

var app = express();
app.use(express.static(__dirname + "/public")); //use static files in ROOT/public folder

app.get("/", function(request, response){ //root dir
    response.send("Hello!!");
});

app.listen(port, host);

참고 왕치필레 (사용하거나 노드먼) 너무 추가해야 합니다. 단순 연결 서버 코드 위에 불과하다.

3 단계: '노드입니다 세르베리에스 노드먼 세르베리에스' '또는'

이제 더 쉬운 방법을 그냥 호스트입니다 경우 간단한 HTTP 서버. 'g' http 서버 고궁박물원 설치 -

우리 디렉토리이며 http 서버 '유형' 열어

https://www.npmjs.org/package/http-server

해설 (5)
  • 빠른 way:*
var express = require('express');
var app = express();
app.use('/', express.static(__dirname + '/../public')); // ← adjust
app.listen(3000, function() { console.log('listening'); });
  • 너회의 way:*
var http = require('http');
var fs = require('fs');

http.createServer(function (req, res) {
    console.dir(req.url);

    // will get you  '/' or 'index.html' or 'css/styles.css' ...
    // • you need to isolate extension
    // • have a small mimetype lookup array/object
    // • only there and then reading the file
    // •  delivering it after setting the right content type

    res.writeHead(200, {'Content-Type': 'text/html'});

    res.end('ok');
}).listen(3001);
해설 (0)

39 의 깔끔한 it& switch 문으로 다루는 것이 아니라, 내가 생각하는 내용을 조회할 유형 (사전:

var contentTypesByExtension = {
    'html': "text/html",
    'js':   "text/javascript"
};

...

    var contentType = contentTypesByExtension[fileExtension] || 'text/plain';
해설 (2)

이것은 기본적으로 문제에 대한 수락됨 접속하십시오 업데이트된 버전인 버전 3:

var connect = require('connect');
var serveStatic = require('serve-static');

var app = connect();

app.use(serveStatic(__dirname, {'index': ['index.html']}));
app.listen(3000);

난 또 기본 옵션 도왔으매 index. html 은 기본 역할을 했다.

해설 (0)

아마 당신은 경우 PC 에 설치되어 있는 경우 노드입니다 너회들 고궁박물원 don& # 39, t need 노데지스 것 경배하되 패키지로의 엔드입니다 사용할 수 있습니다.

1 - 패키지로부터 장착합니다 사용자의 PC:

npm install -g serve

2 - 서비스를 제공하십시오 정적임 폴더:

serve <path> 
d:> serve d:\StaticSite

어떤 포트가 표시되며, 그냥 탐색하십시오 다음과 같은 호스트입니다 너회의 정적임 폴더에서는 지낸 중입니다.

http://localhost:3000
해설 (2)

39, t need to 너회가 don& 고궁박물원 모듈을 사용하여 간단한 서버이면 # 39 에 매우 작은 실행하십시오 there& 고궁박물원 Server&quo , * 라이브러리란 호출됨 &quot 무료. 노드에 대해:

코드 파일 또는 폴더 및 출력입니다 요청하는 경우 50 선이 적색 또는 녹색 색상 실패한 경우 이 문서에 대해 했다. 미만임 1KB 의 크기 (축소 된).

해설 (3)

흥미로운 것은 있을 수 있는 일부 찾았다고 고궁박물원 library) 사용할 수 있습니다. # 39 의 마임 (mime '또는' 고궁박물원 설치처 it& 불렀으매 https://github.com/broofa/node-mime) 및 파일 형식을 mime 확인할 수 있습니다. # 39 의 예를 들면, 웹 서버 here& 사용해 I wrote:

var mime = require("mime"),http = require("http"),fs = require("fs");
http.createServer(function (req, resp) {
path  = unescape(__dirname + req.url)
var code = 200
 if(fs.existsSync(path)) {
    if(fs.lstatSync(path).isDirectory()) {
        if(fs.existsSync(path+"index.html")) {
        path += "index.html"
        } else {
            code = 403
            resp.writeHead(code, {"Content-Type": "text/plain"});
            resp.end(code+" "+http.STATUS_CODES[code]+" "+req.url);
        }
    }
    resp.writeHead(code, {"Content-Type": mime.lookup(path)})
    fs.readFile(path, function (e, r) {
    resp.end(r);

})
} else {
    code = 404
    resp.writeHead(code, {"Content-Type":"text/plain"});
    resp.end(code+" "+http.STATUS_CODES[code]+" "+req.url);
}
console.log("GET "+code+" "+http.STATUS_CODES[code]+" "+req.url)
}).listen(9000,"localhost");
console.log("Listening at http://localhost:9000")

이렇게 하면 모든 경배하되 일반 텍스트, 이미지 파일 (.html, .css, 스이스, .pdf, jpg, .png, .m4a 및 .mp3 오른길로 확장장치 I& # 39, ve 테스트됨, 하지만 이 모든 것에 대해 노력해야 한다는 이론) 개발자 Notes&lt /h1&gt h1&gt <;;;

I got it 와 있는 출력을 의 예를 들어보겠습니다.

Listening at http://localhost:9000
GET 200 OK /cloud
GET 404 Not Found /cloud/favicon.ico
GET 200 OK /cloud/icon.png
GET 200 OK /
GET 200 OK /501.png
GET 200 OK /cloud/manifest.json
GET 200 OK /config.log
GET 200 OK /export1.png
GET 200 OK /Chrome3DGlasses.pdf
GET 200 OK /cloud
GET 200 OK /-1
GET 200 OK /Delta-Vs_for_inner_Solar_System.svg

이 길을 '기능을 어니스카피 디이브이' 이다. 이것은 파일 이름을 사용할 수 있는 공간 및 인코딩되지 자입니다.

해설 (0)

편집:

    • 노드입니다 app 은 node. js 샘플링합니다 채팅합니다 기능을 적용할 수 있습니다.

      39 의 it&, s 레드메스테스트피레

  1. 단계는 너희는너희가 찾고 있다.

&gt. step1 &gt. &gt. - create server hello world 에 있는 포트 8002 응답합니다. &gt. &gt. step2 &gt. &gt. - 경배하되 생성하시겠습니까 index. html 및 정보기술 (it) &gt. &gt. step3 &gt. &gt. - 티라자이스 소개하십시오. &gt. - 어떤 논리를 도왔으매 정적임 파일은 변경하십시오 했다 &gt. - show 404 경우에 파일이 없습니다. &gt. &gt. step4 &gt. &gt. - 추가 jquery-1.4.2.js &gt. - 추가 클리앵 t.j스 &gt. - index. html 에 대한 정확한 사용자 '로 변경

다음은 세르베리에스

다음은 티라자이스

해설 (5)

이 회사는 이를 위해 우선 설치처 노드입니다 정적임 서버를 통해 전역으로라는 운행에서어떠한 나는한다

npm install node-static -g

그리고 html 파일과 함께 들어 있는 디렉토리로 이동합니다 '정적' 정적 서버 시작합니다.

Documentum. localhost:8080/&quot, yourHtmlFile&quot 브라우저와 유형 ','.

해설 (2)

하지만 기본적으로 생성하기에 js 파일 복사 방지 수락됨 오토메이티드.

$ node
> var connect = require('connect'); connect().use(static('.')).listen(8000);

늑대굴에서 아주 편해요.

업데이트

현재 최신 버전은 별도의 미들웨어를 익스플레스, 정적임 경배하되 되고 있다. 이 서비스를 제공할 수 있습니다.

require('http').createServer(require('serve-static')('.')).listen(3000)

'설치' 정적임 경배하되 이번이 처음이다.

해설 (0)
var http = require('http');
var fs = require('fs');
var index = fs.readFileSync('index.html');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    // change the to 'text/plain' to 'text/html' it will work as your index page
    res.end(index);
}).listen(9615);

여기서 검색: 엔드입니다 한다고 생각합니다. 단순히 html 코드 - 채워 넣어 index. html 로 정상 있는모든 렌더링하려는 있으며, 다음과 같습니다.


    <h1>Hello world</h1>
해설 (0)

아래 코드를 시작할 수 있는 간단한 html 파일을 웹 서버를 사용하고 있지 않은 경우 기본 파일 렌더링합니다 언급된 uirl.

var http = require('http'),
fs = require('fs'),
url = require('url'),
rootFolder = '/views/',
defaultFileName = '/views/5 Tips on improving Programming Logic   Geek Files.htm';

http.createServer(function(req, res){

    var fileName = url.parse(req.url).pathname;
    // If no file name in Url, use default file name
    fileName = (fileName == "/") ? defaultFileName : rootFolder + fileName;

    fs.readFile(__dirname + decodeURIComponent(fileName), 'binary',function(err, content){
        if (content != null && content != '' ){
            res.writeHead(200,{'Content-Length':content.length});
            res.write(content);
        }
        res.end();
    });

}).listen(8800);

이 모든 이미지 파일을 html, css, js 렌더링됩니다 함께 모든 컨텐트입니다.

없음 , 기술서임을 &quot 잘못된 one*&quo 컨텐츠 유형에 대해 합의할 것보다 낫다.

해설 (0)

39 m, 당신이 원하는 것이 무엇인지 정확히 i& 태그일 경우 종료기 변경, 확신할 수는 있습니다.

{'Content-Type': 'text/plain'}

이:

{'Content-Type': 'text/html'}

이 경우 대신 일반 텍스트 파일을 html 로 표시하십시오 있지만브라우저에 클라이언트입니다.

해설 (1)

하지만 조금 더 자세한 정보를 제공하는 디렉토리 목록을 익스플레스 4.x 버전에서, 압축, 캐싱 및 요청률 줄 수 있는 최소한의 로깅하기

var express = require('express');
var compress = require('compression');
var directory = require('serve-index');
var morgan = require('morgan'); //logging for express

var app = express();

var oneDay = 86400000;

app.use(compress());
app.use(morgan());
app.use(express.static('filesdir', { maxAge: oneDay }));
app.use(directory('filesdir', {'icons': true}))

app.listen(process.env.PORT || 8000);

console.log("Ready To serve files !")
해설 (0)

이러한 환경에서 쉘로 입력하십시ᄃ오 됩니다 "'sh 노프스 경배하되 "'

리포: https://github.com/zeit/serve.

해설 (0)