Node.js初心者ノート
Node.js概要
node.jsはChrome v 8エンジン上に構築されたjavascript実行環境です.
nodeとChromeは同じイベント駆動の非同期アーキテクチャです.Chromeはイベントのインタラクションに基づいているが、nodeはイベントに基づくI/Oである.
nodeにはHTML、Webkit、グラフィックカードドライバなどのUI技術サポートがありません.
運転使用nodejs
コンソールで現在のフォルダに入ることを実現します.node+ファイル名を車に戻して実行します.
ファイルのインポート
現在のフォルダの下にindex.jsと2.js.jsに変数aが含まれている場合(let a=1)
モジュール
イベントキュー、自動整列
node実行初期に無限ループwhile(true){1.scipt(全コード)を実行します.同期同期同期が発生しました.2.scriptを実行した後、micro-taskのキューの中のイベントを全部実行します.3.macro-taskのキューの中の第二層scriptを再実行して、第二層のmicro-taskの4を生成します.続いてmicro-taskの中で新たに発生したイベントキューを最背面層のmacro-taskコードに作成しました.
node原生モジュール
イベントモジュールevents
node.jsはChrome v 8エンジン上に構築されたjavascript実行環境です.
nodeとChromeは同じイベント駆動の非同期アーキテクチャです.Chromeはイベントのインタラクションに基づいているが、nodeはイベントに基づくI/Oである.
nodeにはHTML、Webkit、グラフィックカードドライバなどのUI技術サポートがありません.
運転使用nodejs
コンソールで現在のフォルダに入ることを実現します.node+ファイル名を車に戻して実行します.
ファイルのインポート
現在のフォルダの下にindex.jsと2.js.jsに変数aが含まれている場合(let a=1)
//2.js
let a=1
global.b=ouyang; // global ,node global window
//index.js
const obj=require("./2.js"); //require module.exports
console.log(obj.a); // 2.js a
console.log(global.b); //ouyang
nodeは実行する時コードを再びコンパイルして、コンパイルする時コードを文字列に包んで1つの関数の中に入れてコンパイルして、だから直接大域のvarあるいはlet声明の変数で大域を通じて(通って)直接呼び出せません!モジュール
//02.js
module.exports=function(){
console.log("666")
}; //
module.exports=123123123; //
// module.exports.num=123; //
//index.js
const obj=require("./2.js"); // ./ ,
console.log(obj); //123123123
リダイレクト//2.js
exports=module.exports
exprots.fn=function(){
}; // exports , fn, index.js require ;
nodeはすべての抽象を事件にしました.node実行時、同期同期の違いは以下の通りです.//
process.nextTick(()=>{
console.log("1") //2
})
process.nextTick(()=>{
console.log("2") //3
})
//
setImmediate(()=>{
console.log("3") //6
process.nextTick(()=>{
console.log("4")//8
}
})
setImmediate(()=>{
console.log("5") //7
})
setTimeout(function(){
console.log("8") //5
},0)
//
process.nextTick(()=>{
console.log("7") //4
})
console.log("6") //1
node出力結果6 1 2 7 8 5イベントキュー、自動整列
node実行初期に無限ループwhile(true){1.scipt(全コード)を実行します.同期同期同期が発生しました.2.scriptを実行した後、micro-taskのキューの中のイベントを全部実行します.3.macro-taskのキューの中の第二層scriptを再実行して、第二層のmicro-taskの4を生成します.続いてmicro-taskの中で新たに発生したイベントキューを最背面層のmacro-taskコードに作成しました.
node原生モジュール
イベントモジュールevents
const events=require("events"); // “.EventEmitter” events , new
const eventEmitter=require("events").EventEmitter;
const myEmitter=new EventEmitter();
//
setTimeout(()=>{
//
},2000);
myEmitter.on("someEvents",()=>{
console.log(" ")
}
パスモジュールconst path=require('path')
console.log(path.join("a","b"))// a/b
console.log(__dirname); //
console.log(__filename); // ,
console.log(path.resolve(__dirname,"test"); //
console.log(path.parse(__filename)); //
/*
{
root:'/',
dir:'',
base:'',
name:''
}
*/
URLモジュールconst {URL} = require("url"); // .URL, node
const myUrl=new URL("https://www.baidu.com");
console.log(myUrl); // url json
//search:''
//URLsearchParams:'' map
// parse
const myUrl2=url.parse("https://www.baidu.com");
ファイル操作const js = require('fs')
fs.readFile(' ',(err,data)=>{
if(err) threw err;
console.log(data);
}); // Sync , Sync , err ;
// ,err json , null, , ,
// data buffer , ( ), data , UTF-8
1/非同期読出しconst js=require(‘fs’)const fn=async()=>{
const data =await new Promise((resolve,reject)=>{
fs.readFile("./1.txt","utf8",(err,data)=>{
if(err) return reject(err)
resolve(data)
}
}
console.log(data); //
}
2//
const js = require('fs');
const data="fengyu";
fs.writeFile("./2.txt",data,'utf8',err=>{
if(err) throw err;
console.log(" ");
}) //utf8
サーバのインスタンスを作成const http=require('http')
const fs=require('fs')
const server=http.createServer((req,res)=>{
res.writeHead(200,{
"Content-Type:"text/plain;charset=utf-8"
"}); // ,text/plain ,charset
res.write(" "); // ,
res.end()l//
}); //req requeset, res response
// ^C, , npm nodemon
server.listen(3000); // 1024
//
if(req.method==="GET"){
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"})
switch(req.url){
case "/":
res.write(fs.redFileSync("index.html","utf8"));
}
}
...const http=require('http')
const server=http.createServer((req,res)=>{
const obj={
a:1,
b:2
}
res.write(JSON.stringfy(obj)
})
server.listen(3000,()=>{
console.log(" localhost:3000")
})