인용문과 배경

14480 단어 nodetodayilearned
오늘 Odin'sNode-js course를 시작했습니다.우리 회사는 자기 교육에 열중하고 서로 다른 기술을 배우고 실천하기 위해 정성들여 기획한 과정 목록을 제시했다.제가 NodeJS를 선택한 이유는 JS에 정통했기 때문입니다. 저는 문법의 세부 사항이 아니라 좋은 실천에 더욱 관심을 기울일 수 있습니다.
여기서 나는 그것을 통해 나의 학습을 기록할 것이다.공개된 동기는 다음과 같다.
  • 겁쟁이를 처치하라!나는 인터넷에서 공개적으로 글을 올리는 것에 익숙하지 않다. 이렇게 하는 것은 나에게 있어서 이미 큰 걸음을 내디뎠다.

  • Learn by teaching: 방금 소화한 내용을 재해석하는 것이 기억에 도움이 될 수 있다.
  • 잠수합시다.🤿 !

    소개

  • 2009년 이후 NodeJ가 존재합니다.
  • 이것은 자바스크립트가 실행될 때입니다. 로컬 시스템에서 실행되며 브라우저에서 실행되는 자바스크립트와 반대입니다.백그라운드에서는 JS가 브라우저에서 실행하는 것처럼 Node가 가상 시스템에서 실행될 것 같습니다.
  • 비동기 이벤트로 구동됩니다. 코드 줄이 반드시 순서대로 실행되는 것은 아닙니다.반대로 우리는 네트워크 요청이나 리셋 등 이벤트에 호출된 함수
  • 를 작성했다

    이벤트 구동


    예를 들어 나는 우산을 잊어버렸는지 알려주는 앱을 원한다.단계는 다음과 같습니다.
  • 일기예보 얻기
  • 날씨가 맑으면 멈춰라
  • 만약 내가 우산을 이미 받았다면 나의 데이터베이스'백팩'
  • 을 검사하세요
  • 내가 받으면 멈춰
  • 우산 가져오라고 알림
  • 여기에는 예측을 얻고 데이터베이스를 검사하는 두 가지 비동기적인 과정이 있다.만약 내가 하나하나 이 절차들을 운행한다면 프로그램은 작동할 것이다.하지만 여러 작업을 동시에 수행하여 속도를 높일 수 있습니다.
  • 예측을 얻고 날씨가 맑으면 멈춘다
  • 데이터베이스 검사, 우산 있으면 정지
  • 그러면 날씨가 맑지 않습니다. 만약 제가 우산이 없다면 그것을 가지고 가라고 일깨워 주십시오
  • 이렇게 하면 우리는 forecast나 DB의 첫 번째 응답을 받은 후 프로그램을 즉시 중지하거나 다음 작업으로 전달합니다.이 두 작업이 실행 (가져오기와 조회) 할 때, 노드는 하나의 이벤트를 기다립니다. 여기는 가져오기/조회의 완성입니다.이 과정은 전방에서 사용하는 것에 가깝지만addEventListener, 우리의 이벤트는 주로 네트워크 요청과 데이터베이스 조회일 것이며, 마우스 클릭을 기다리는 것이 아니다.
    이벤트를 처리하기 위해 callbacks를 사용합니다.

    A callback is a function pass to another function as argument.


    많은 함수들이 리셋을 사용하는데, 심지어는 mapforEach: [1, 2, 3].forEach(n => console.log(n).이벤트 탐지기는 리셋을 사용하는 방식이 같다: element.addEventListener('click', console.log).
    다음은 NodeJS의 콜백 사용법의 예입니다.
    http
      .createServer((req, res) => {
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end('Hello Node!');
      })
      .listen(8080);
    

    작업: 읽기 및 보기


    NodeJS 웹 사이트


    nodejs.org

    막히다


    내가 사이트를 훑어보는 과정에서 나는 blocking vs non blocking 페이지를 만났는데 이 페이지는 나의 호기심을 불러일으켰다. 왜냐하면 이것은 명칭이 Sync로 끝나는 방법을 언급했기 때문이다.이것은 위의 이벤트 구동 부분과 관련이 있을 수 있기 때문에 나는 계속 읽는다.
    차단 방법은 동기적으로 실행되고, 비차단 방법은 비동기적으로 실행된다.
    const fs = require('fs');
    const data = fs.readFileSync('/file.md'); // 1. blocks the process until the file is read
    console.log(data); // 2. called after data read
    nextMethod(); // 3. called after console.log
    
    fs.readFile('/file.md', (err, data) => {
      // 1. async method, do not block the process !
      if (err) throw err;
      console.log(data); // 3. console when 1. resolved
    });
    nextMethod(); // 2. called without waiting completion of 1.
    
    차단 방법은 해결될 때까지 동시에 실행됩니다.오류가 있으면 오류를 포착해야 합니다. 그렇지 않으면 프로세스가 붕괴됩니다.
    비차단 방법은 비동기적으로 실행되며 실행을 막지 않습니다.일반적으로 해석된 후에 다른 조작을 실행하기 위해 리셋을 전달할 수 있다.
    NodeJS는 단일 스레드이므로 병렬 프로세스는 이벤트 순환을 의미합니다.한 서버에서 여러 개의 요청을 수신하고 처리 프로그램이 데이터베이스에 대한 신속한 I/O 작업을 요청하는 것을 고려해 봅시다.차단 방법을 사용하면 요청을 하나하나 처리하여 후속 요청의 해결을 지연시킬 수 있다.그러나 비차단 방법을 사용하면 서버가 입력/출력 작업을 할 때 다른 요청을 처리할 수 있습니다.이것은 커다란 성능 차이를 초래할 수 있다.
    동기화와 비동기화 방법을 조심스럽게 혼합하여 사용하세요!다음 예제에서는 오류가 발생합니다.
    fs.readFile('/file.md', (err, data) => {
      // 1. start reading file.md
      if (err) throw err; // 3. crash ! can't read data as the file has been deleted whild reading it.
      console.log(data);
    });
    fs.unlinkSync('/file.md'); // 2. delete file.md
    
    리셋에 비차단 호출을 배치하면 더욱 안전한 작업 순서를 보장할 수 있습니다.
    fs.readFile('/file.md', (err, data) => {
      // 1. start reading file.md
      if (err) throw err;
      console.log(data); // 2. log data
      fs.unlink('/file.md', err => {
        // 3. start removing file
        if (err) throw err; // handle error if necessary
      });
    });
    

    MDN 서버 측 소개


    MDN

    하이퍼텍스트 전송 프로토콜


    Http는 두 컴퓨터(클라이언트와 서버) 사이에서 하이퍼텍스트 (링크된 웹 문서) 를 전송하는 데 사용되는 프로토콜입니다.이것은 텍스트의 (모든 명령은 순수한 텍스트이고 인간이 읽을 수 있는) 상태와 무상태입니다. 클라이언트든 서버든 이전에 교환한 상태를 보존하지 않습니다.클라이언트만 HTTP 요청을 보낼 수 있고 서버는 응답할 수 있습니다.서버는 모든 http 요청에 대답해야 합니다. 적어도 오류 메시지가 있어야 합니다!

    정적 및 동적


    정적 사이트는 자원을 요청할 때마다 항상 같은 내용을 제공합니다.게이츠비의 사이트는 정적이다. 그들은 서버에 구축하고 저장한 후에 원래대로 발송한다.
    동적 사이트는 필요에 따라 생성되며 일반적으로 데이터베이스의 데이터를 템플릿에 삽입합니다.서버는 요청에 따라 전송되거나 데이터베이스에 저장된 사용자가 선호하는 내용을 조정할 수 있습니다.

    이점


    효율적인 저장 및 납품: 아마존의 제품이나 페이스북 게시물 등 데이터베이스에 대량의 데이터를 저장하는 것이 단일 웹 페이지보다 효율적이다.서버는 이 데이터베이스에 접근하여 구축된 웹 페이지(html)나 데이터(json)를 되돌려줍니다.예를 들어 아마존 결과와 제품 페이지.
    사용자 정의 사용자 체험: 서버는 신용카드 상세 정보, 검색 내역 또는 습관과 같은 사용자 정보를 저장할 수 있다.예를 들어 구글은 이전의 검색을 자동으로 완성한다.
    액세스 제어: 보기, 편집, 삭제할 수 있는 사람을 제어합니다...메시지이것은 사용자일 수도 있고 다른 서버일 수도 있다.예를 들어 은행 사이트는 계정 정보를 보거나 비밀번호를 편집하기 위해 로그인해야 합니다.은행 자체는 당신의 계좌 잔액을 편집할 수 있습니다.
    세션/상태 정보 저장: 서버는 사이트의 현재 사용자를 기억하고 응답을 조정할 수 있습니다.한 신문은 네가 n페이지를 훑어본 후에 구독할 것을 요구한다.
    알림 및 통신: 서버에서 이메일, 문자, 푸시 알림을 보낼 수 있습니다...실시간 메시지와 영상 대화도 있다.
    데이터 분석: 우리는 사용자에 대한 대량의 데이터를 수집하여 사용할 수 있다.예를 들어 페이스북 뉴스 요약이나 광고.

    웹 프레임워크


    프레임워크 처리는 응용 프로그램에 자주 반복해야 하는 일반적인 작업입니다.
    리소스/페이지의 URL을 프로세서 함수에 쉽게 매핑하려면 다음과 같이 하십시오.
    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
       url(r'^$', views.index),         # example: /best/
       url(r'^junior/$', views.junior), # example: /best/junior/
    ]
    
    모델의 필터 데이터로 html 템플릿 채우기:
    from django.shortcuts import render
    from .models import Team
    
    def junior(request):
        list_teams = Team.objects.filter(team_type__exact="junior")
        context = {'list': list_teams}
        return render(request, 'best/index.html', context)
    
    Express는 매우 유행하는 노드 프레임워크이다.그것은 웹 응용 프로그램과 http 요청에 실용적인 프로그램을 제공하는 빠르고 번역할 필요가 없다.이것은 최소한입니다. 일부 기능 (데이터베이스 접근, 사용자 제한) 은 라이브러리나 다른 express 기반 프레임워크에서 불러올 수 있습니다.
    Deno는 V8과 Rust를 사용하여 구축된 간단하고 현대적이며 안전한 JS/TS 런타임 및 프레임워크입니다.그것은 안전성, 포맷, 모듈 버전 등 노드의 몇 가지 문제를 해결하려고 한다.

    Freecodecamp 노드 소개


    Freecodecamparticle 및 링크된 비디오에 대한 명확한 설명(!)이벤트 순환:
    강연자는 자신이 만든 도구를 사용하여 호출 스택, 웹 API, 리셋 대기열, 렌더링 대기열의 현재 상태를 표시합니다. Loupe
    This는 사건의 순환과 비동기적인 집행에 관한 더욱 깊은 문장이다.

    응용 예


    7 things NodeJS로 구축할 수 있습니다.이것들은 모두 재미있고 진실한 프로젝트이다.

  • Gif chat room:D
  • Remote control a car
  • 우리 포켓몬 (twitch처럼!)
  • 원격 조종 컴퓨터
  • hangout과 유사한 사이트 구축
  • 공동 드로잉 도구
  • 데스크탑 RSS 리더기
  • 결론


    오딘 과정은 기본 개념부터 시작한다.나는 독학으로 인재가 되었기 때문에 CS 학술 과정이 없기 때문에 나의 학습은 때때로 복잡함 속에서 왔다갔다하며 도약한다.지금 주문한 기초 지식을 되돌아보게 되어 기쁩니다!

    좋은 웹페이지 즐겨찾기