Node.js를 (18)는 정적 웹 서버를 생성 HTTP

원래 문서 -http를 참조하십시오 //bjbsair.com/2020-03-22/tech-info/2821/
먼저 우리가 HTTP 구현하는 정적 웹 서버 요구 사항을 필요로하는지 설명합니다, 우리는 Node.js를에서 시작됩니다, 기관은 필요 모듈.

Node.js를 08 코드는 정적 웹 서버를 생성 HTTP

HTTP

HTTP 정적 웹 서버

Node.js를 클라이언트에 서비스를 제공하기를 통해 다음 HTTP 정적 서버는 정적 웹 서버를 정적 웹 사이트를 생성하고, 생성하는 것입니다. 정적 웹 서버의 예는 아파치 아파치 디렉토리, 다음에 HTML, CSS, 자바 스크립트, JPG 및 기타 정적 리소스와 관련된 사이트에만 필요하고, 호스트 이름 만 페이지를 표시 할 수 액세스 할 수 있어야합니다.

것을 우리가 볼 수있는 자원이 정적 웹 사이트 등을 :

  • html 파일
  • CSS 파일
  • 자바 스크립트 파일

현실은 이러한 세 가지 주요 문서 또한 사이트의 자원의 대부분 등등 이미지 파일, 오디오 파일, 압축 파일, 폰트 파일 등이 포함됩니다, 그입니다.

정적 웹 사이트의 웹 서버가 제공해야

  • HTTP 서비스, 당신은 HTTP에 대한 클라이언트에 의해 제출 된 요청 수, 정적 페이지의 정적 페이지와 필요한 자원을 반환 사용할 . 당신은 index.html을 페이지에 표시하려면 클라이언트 브라우저에 반환 할 이미지 파일, CSS 스타일 파일, 자바 스크립트 파일의 요구에 사용 된 페이지에 액세스한다고 가정. 프로그램 만 반환 html 파일 경우, 관련 이미지, CSS 효과 응답을 표시하지 않습니다 브라우저는 자바 스크립트 효과가 나타나지 않을 수 있습니다.
  • 클라이언트에 의해 제출 된 모니터 HTTP 요청에 대한 HTTP 포트, 포트 (80)는 위의 아파치에 의해 사용된다. 다양한 웹 서버 포트 구성을 지원, 우리는 프로그램에서 예외 구현 될 수 없다됩니다 Node.js를
  • 상태 코드 : 각 클라이언트 요청에 대해 반환 페이지하면서, 웹 서버는 상태 코드를 반환합니다. 성공적으로 요청 상태 코드를 처리 (200)(404)은 파일을 표시 또는 자원을 찾을 수 없습니다.

HTTP 헤더 中 的 콘텐츠 유형

Node.js를 08 코드는 정적 웹 서버를 생성 HTTP

HTTP 헤더

웹 사이트에 액세스 할 때 그림은 응답 헤더 HTTP이다. 우리는이 상태 코드 상태 코드는 요청이 성공적으로 처리 된 것을 나타내는, 200 볼 수 있습니다. 응답 헤더는 콘텐츠 형식 안에 반환에 값 "; 문자셋 = UTF-8 텍스트 / HTML"가있다.

  • text / html과 : 페이지 형식으로 명시 적 반환은 HTML, HTML 페이지는 브라우저의 형태로 표시됩니다.
  • 캐릭터 세트 : 페이지의 문자 세트를 돌려줍니다

이 "텍스트 / 일반"일반 용지에 페이지의 표현을 보여주는 것입니다 때로는 페이지 형식으로 반환합니다.

이러한 형식은 총칭하는 MIME (다목적 인터넷 메일 확장)가 인터넷 표준의 메시지 내용의 유형에 대한 설명입니다.

파일 유형에 따라 HTTP 헤더의 컨텐츠 유형 필요가있는 값은 쓰기에 해당.

당신은 특별히 얻을 수있는 키의 방법으로는 Node.js를에 상수를 정의 할 수 있습니다 파일 확장자를 내용을-입력합니다.

const mimeType = {  
  '.ico': 'image/x-icon',  
  '.html': 'text/html',  
  '.js': 'text/javascript',  
  '.json': 'application/json',  
  '.css': 'text/css',  
  '.png': 'image/png',  
  '.jpg': 'image/jpeg',  
  '.wav': 'audio/wav',  
  '.mp3': 'audio/mpeg',  
  '.svg': 'image/svg+xml',  
  '.pdf': 'application/pdf',  
  '.zip': 'application/zip',  
  '.doc': 'application/msword',  
  '.eot': 'application/vnd.ms-fontobject',  
  '.ttf': 'application/x-font-ttf',  
};

기본적으로 자원 유형의 정적 웹 사이트의 정의를 충족 위의 코드가 필요합니다.

코드 로직 및 구현

  1. 참조 Node.js를 통해 서버에 http 만들기 04 HTTP 서버 예비 Node.js를
  2. 구문 분석 URL
  3. 액세스 경로는 파일이나 디렉토리 존재에 의해 결정된다, 다음 오류 상태 코드 (404)이 아니라면
  4. 디렉토리에 액세스 경로는 파일 경로가 index.html을 반환하는 경우
  5. 자원 유형에 따라 Conten 타입을 설정하는 동안 응답 요청 경로의 내용에 따라 파일을 기록한다.

관련 코드의 요구를 처리하는 문서 처리, 디렉토리와 모든 논리 위의 FS Node.js를 모듈을 호출하여 수행 할 참조 Node.js를 07 파일 작업 .

코드 세그먼트 상세한 :

http.createServer(function (req, res) {  
  // 调用url模块来解析访问的url  
  const parsedUrl = url.parse(req.url);  
  
  // 提取路径  
  const sPath = path.normalize(parsedUrl.pathname).replace(/^(\.\.[\/\\])+/, '');  
  let pathname = path.join(__dirname, sPath);  
//判断路径是否存在  
  fs.exists(pathname, function (exist) {  
    if(!exist) {  
      //如果路径不存在,则返回404  
      res.statusCode = 404;  
      res.end(`File ${pathname} not found!`);  
      return;  
    }  
  
    // 如果路径是目录,则将路径替换为目录下的 index.html  
    if (fs.statSync(pathname).isDirectory()) {  
      pathname += '/index.html';  
    }  
  
    // 根据路径读取文件,此处调用fs模块方法  
    fs.readFile(pathname, function(err, data){  
      if(err){  
        res.statusCode = 500;  
        res.end(`Error getting the file: ${err}.`);  
      } else {  
        // 获取路径后缀名  
        const ext = path.parse(pathname).ext;  
        // 根据后缀名获取响应的content-type; 这里的minType定义见上面的代码块  
        res.setHeader('Content-type', mimeType[ext] || 'text/plain' );  
        //通过end方法来结束response  
        res.end(data);  
      }  
    });  
  });  
//提供http端口监听  
}).listen(8001);

이러한 정적 웹 서버 HTTP 코드가 많은 언어에 비해 매우 가벼운 완료, 그것은 매우 린이라고 할 수있다.

원저는 0 출판 · 원의 칭찬 0 · 298 조회수

추천

출처blog.csdn.net/zxjoke/article/details/105084904