Node 단순화

69495 단어 node

1-1Node 개요


데스크톱 응용 프로그램 개발
서버 응용 프로그램 개발 = > (1) 마이크로 사이트, Node 서버는 요청, 응답, 데이터베이스와 상호작용, 각종 업무 논리를 완성해야 한다.(2) node 비동기 모드는 대량으로 요청할 수 있습니다.node 서버는 업무 논리와 관련된 어떤 일도 하지 않습니다.대부분은 간단한 전송 요청일 뿐, 추가 기능이 있을 수 있습니다 [간단한 정보 기록, 정적 자원 위탁 관리. 캐시].

1-02 글로벌 객체


setTimeout/setInteval/setimmediate/console/_dirname(현재 모듈이 있는 디렉터리 가져오기)/_filename/Buffer(유형화 그룹, Ulnt8Array에서 상속)/process(cwd)/

1-03NODE 모듈식 세부 사항


① 모듈 찾기: (1) 절도 경로 [어떤 경로든 결국 절대 경로로 유도됩니다]
require("D:\\a.js")

(2) 상대 경로 (3) 접두사 이름: 접두사 이름을 제공하지 않으면 파일 이름이 자동으로 완성됩니다 (4) 파일 이름: 이 디렉터리를 제공하고, 파일 이름을 제공하지 않으면 이 디렉터리의 index를 자동으로 찾습니다.js; package.json의main 필드: 패키지의 기본 입구, 기본값 index를 표시합니다.js
②mudule은 현재 모듈의 정보를 기록합니다: 누가 인용했고 어떤 하위 모듈이 인용되었는지.③ resolve: 절대 경로를 얻는다 ④ this == exports == module.exports//true (this 시작은 exports를 가리킨다)

1-04 Node의 ES 모듈식


모듈은commonjs나es

1-05 기본 내장 모듈


①OS
 os.EOL     ->/r/n
os.arch()   -> (x32/x64)
os.cpus().length     ->4
os.freemem()          -> 
os.homedir()            -> 
os.hostname()        -> 
os.tmpdir()         -> 

②path
const path = require("path")
const basename = path.basename("dd/ss/a.html")
console.log(basename)  ->a.html

const basename = path.basename("dd/ss/a.html",'.html')
console.log(basename)  ->a
console.log(path.sep)    -> (\)
console.log(process.env.PATH.split(path.delimiter))  -> 
const dir = path.dirname('ab/s/d.js');
console.log(dir)    ->ab/s    
const path = require("path")
const ext = path.extname('ab/s/d.js');
console.log(ext)             ->.js)
const path = require("path")
const fullPath = path.join('a','b','c','d.js');
console.log(fullPath);  ->a\b\c\d.js    
const path = require("path")
const rel = path.relative('/data/aaa','/data/bbb');
console.log(rel);    ->    ..\bbb
const URL = require('url')
 const url = new URL.URL("")
 console.log(url)

③ util 키트
const Util = require('util')

async function delay(duration = 1000){
    return new Promise(resolve => {
        setTimeout(() => {
            resolve(duration)
        }, duration);
    });
}
const delayback = Util.callbackify(delay)
delayback(500,(err,d) => {
    console.log(d)     //  ->500
})


// 
function delayCallBack(duration,callback){
    setTimeout(() => {
        callback(null,duration)
    },duration)
}
const delay = Util.promisify(delayCallBack);
delay(500).then(d => console.log(d))


// 


function delayCallBack(duration,callback){
    setTimeout(() => {
        callback(null,duration)
    },duration)
}
// const delay = Util.promisify(delayCallBack);
// delay(500).then(d => console.log(d))

const delay = Util.promisify(delayCallBack);
(async () => {
    const r = await delay(500);
    console.log(r)
})();
// 
const util = require('util')
const obj1 = {
    a:1,
    b:{
        c:3
    }
};
const obj2 = {
    a:1,
    b:{
        c:3
    }
}
console.log(util.isDeepStrictEqual(obj1,obj2))  //->true



1-6 파일 IO


① fs 모듈
readFile
const fs = require('fs')
const path = require('path')
// 
const filename = path.resolve(__dirname,'./myFiles/1.txt')
fs.readFile(filename,(err,content)=>{
    console.log(content.toString('utf-8'))
})
const fs = require('fs')
const path = require('path')
const filename = path.resolve(__dirname,'./myFiles/1.txt')
async function test(){
    const content = await fs.promises.readFile(filename,'utf-8');
    console.log(content)
}

test();


writeFile
const fs = require('fs')
const path = require('path')
const filename = path.resolve(__dirname,'./myFiles/1.txt')
async function test(){
    await fs.promises.writeFile(filename,'abc','utf-8');
    console.log(' ')
}
test();
const fs = require('fs')
const path = require('path')
const filename = path.resolve(__dirname,'./myFiles/1.txt')
async function test(){
    await fs.promises.writeFile(filename,'abcd',{
         flag:"a"// 
    });
   
    console.log(' ')
}
test();

// copy 
const fs = require('fs')
const path = require('path');

async function test(){
    const fromFilename = path.resolve(__dirname,'./myFiles/1.jpg');
    const buffer = await fs.promises.readFile(fromFilename);
    const toFilename = path.resolve(__dirname,'./myFiles/1.copy.jpg');
    await fs.promises.writeFile(toFilename,buffer);
    console.log('copy success')
}
test();

stat: 파일이나 디렉터리 정보 가져오기
const fs = require('fs')
const path = require('path');
const filename = path.resolve(__dirname,'./myFiles/1.jpg')
async function test(){
   const stat = await fs.promises.stat(filename)
    console.log(stat)
    console.log(' ',stat.isDirectory());
    console.log(' ',stat.isFile());
}
test();

하위 파일 정보 가져오기

const fs = require('fs')
const path = require('path');
const dirname = path.resolve(__dirname,'./myFiles/')
async function test(){
  const pathes = await fs.promises.readdir(dirname);
  console.log(pathes)
}
test();

1-07 파일 스트림 읽기 가능 스트림


읽을 수 있는 흐름, 쓸 수 있는 흐름, 이중 작업 흐름.읽을 수 있는 파일을 만들려면 다음과 같이 하십시오.
fs.createReadStream(path[,options])
// :encoding,start.end,highWaterMark

반환: Readable 하위 클래스 ReadStream

const fs = require("fs");
const path = require("path")

const filename = path.resolve(__dirname,'./1.txt');
const rs = fs.createReadStream(filename,{
    encoding:"utf-8",
    highWaterMark:1,
    autoClose:true,// ( )
})
rs.on("open",()=>{
    console.log('dakaile')
})
rs.on("error",()=>{
    console.log('error')
})
rs.on("close",()=>{
    console.log('close')
})
rs.on("data",chunk=>{
    console.log(' ',chunk)
    rs.pause();
})
rs.on("pause",()=>{
    console.log('pause')
    setTimeout(() => {
     rs.resume();
},1000)
})
rs.on("end",()=>{
    console.log('end')
})
rs.pause()// 
rs.resume()// 

1-07-2 파일 흐름 - 쓰기 가능 흐름

fs.createWriteStream(path[,options])
const fs = require("fs");
const path = require("path")
const filename = path.resolve(__dirname,'./1.txt');
const ws = fs.createWriteStream(filename,{
    // flags:"",
    encoding:"utf-8",
    // start:"",// ,
    highWaterMark:2,// 
});
const flag = ws.write("a");
console.log(flag)
//  
// true: , , 。
// false: , 。
ws.on("drain",()=>{
    console.log(" ")
    write();
})
ws.end();

//copy txt 하나
const fs = require("fs");
const path = require("path")
// const filename = path.resolve(__dirname,'./1.txt');
async function method1(){
    const form = path.resolve(__dirname,'./1.txt');
    const to = path.resolve(__dirname,'./abc1.txt');
    const content = await fs.promises.readFile(form)
    await fs.promises.writeFile(to,content);
    console.log(' ')
}
method1();

//최적화 후 메모리 사용량이 줄어들었습니다.
async function method1(){
    const form = path.resolve(__dirname,'./1.txt');
    const to = path.resolve(__dirname,'./abc1.txt');
   
    const rs = fs.createReadStream(form);
    const ws = fs.createWriteStream(to)
    rs.on("data",chunk => {
        //  
        const flag = ws.write(chunk);
        if(!flag){
            //  
            rs.pause();// 
        }
    });
    ws.on('drain',()=>{
        //  
        rs.resume();
    });
    rs.on('close',()=>{
        //  
        ws.end();
    })
}

//pipe()
async function method1(){
    const form = path.resolve(__dirname,'./1.txt');
    const to = path.resolve(__dirname,'./abc1.txt');
   
    const rs = fs.createReadStream(form);
    const ws = fs.createWriteStream(to)
    
    //  
    //  
    rs.pipe(ws)
    rs.on("close",()=>{
        
    })
}

method1();

1-08 net 모듈


1-09http 모듈

const http = require("http");
// 
const server = http.createServer((req,res) => {
    console.log(" ")
    console.log(" ",req.url);
    console.log(" ",req.urlobj);
    console.log(" ",req.headers)
    let body = ''
req.on('data',chunk => {
    body + chunk.toString('ytf-8')
});
req.on('end',chunk=>{
    console.log(" ",body)

});
res.setHeader('a','1')
res.write(' ');
res.end()
})
server.listen(9527);
server.on('listening',()=>{
    console.log("server listen 9527")
})














// const request =  http.request("http://duyi.ke.qq.com/",{
//     method:"GET"
// },
//     resp => {
//         console.log(" ",resp.statusCode);
//         console.log(" ",resp.headers);
//         resp.on('data',chunk => {
//             console.log(chunk)
//         })
//     }

// );
// request.end();// 


//  
// http://localhost:9527//index.html ->public/index.html  
//http://localhost:9527/css/index.css -> public/css/index.css

const http = require("http")
const URL = require("url")
const path = require("path");
const fs = require("fs")

async function getStat(filename){
    try{
        return await fs.promises.stat(filename);
    }catch{
        return null
    }
}
//  
async function getFileInfo(url){
    const urlObj = URL.parse(url);
    console.log(urlObj.pathname);
    let filename;// 
    filename = path.resolve(__dirname,"public",urlObj.pathname.substr(1))
    const stat = await getStat(filename)
    console.log(stat)

}

function handler(req,res){
    const info = getFileInfo(REQ.url)
    res.write('hello')
    res.end();

}

const server =  http.createServer(handler);
server.on("listening",()=>{
    console.log("server listen 6000")
});
server.listen(6000);

1-10https 모듈


1-12Node 라이프 사이클


timers: 타이머를 저장하는 리셋 함수poll: 리셋 대기열,timers를 제외하고checks는 대부분의 리셋을 이 대기열에 넣습니다.예를 들어 파일의 내용을 읽고 사용자의 요청을 감청한다.poll 대기열 운영 방식:poll에 리셋이 있으면 순서대로 리셋을 실행합니다. 대기열을 비울 때까지.폴에 리셋이 없으면 다른 대기열에 리셋이 나타날 때까지 기다립니다. 이 단계를 끝내고 다음 단계로 넘어갑니다.다른 대기열도 리셋되지 않으면 리셋이 나타날 때까지 기다립니다.check: 검사 단계, setImmediate() 시간 순환을 사용합니다. 매번 리셋을 실행하기 전에 nextTick과promise 대기열을 비워야 합니다.

1-13EventEmitter

좋은 웹페이지 즐겨찾기