Node.jsの基本

I. 概要

NodeJ では何ができるのでしょうか?

  • 軽量で高性能なWebサーバー
  • フロントエンドとバックエンドの JavaScript の同型開発
  • 便利で効率的なフロントエンドエンジニアリング

2 つ目は、nodejs アーキテクチャ

ここに画像の説明を挿入

  • 現在のレイヤーのコンテンツは js によって実装されます
  • fs、path、http などのライブラリを直接呼び出すことができるアプリケーションを提供します。
  • JS 言語は基礎となるハードウェア設定を直接操作できません

ここに画像の説明を挿入
最下層

  • V8: JS コードを実行し、ブリッジ インターフェイスを提供します
  • Libuv: イベント ループ、イベント キュー、非同期 IO
  • サードパーティモジュール: zlib、http、c-area など。

ここに画像の説明を挿入

3. なぜnodejsなのか

Nodejs はゆっくりとサーバーサイドの「言語」に進化しました

ここに画像の説明を挿入
IO はコンピュータ操作プロセスの中で最も遅いリンクです

ここに画像の説明を挿入
Reactor モード、シングルスレッドでマルチスレッド作業を完了
Reactor モードで非同期 IO、イベント駆動型
Nodejs を実現

4. Nodejs の非同期 IO

ここに画像の説明を挿入

5. イベント駆動型

イベント駆動、パブリッシュ/サブスクライブ、オブザーバー

公開購読する

const EventEmitter = require('events')

const myEvent = new EventEmitter()

myEvent.on('事件1', () => {
    
    
  console.log('事件1执行了')
})

myEvent.on('事件1', () => {
    
    
  console.log('事件1-2执行了')
})

myEvent.emit('事件1')

ここに画像の説明を挿入

6、nodejsはAPIサービスを実装します

ts-node は、ts を直接実行するサードパーティ パッケージです。

サーバー.ts

// 需求:希望有一个服务,可以依据请求的接口内容返回相应的数据
import express from 'express'
import {
    
     DataStore } from './data'

// console.log(DataStore.list)

const app = express()

app.get('/', (req, res) => {
    
    
  // res.end('1122')
  res.json(DataStore.list)
})

app.listen(8080, () => {
    
    
  console.log('服务已经开启了')
})

ts-node .\server.ts

7、nodejs グローバル オブジェクト

  • __filename: 実行中のスクリプト ファイルの絶対パスを返します。
  • __dirname: スクリプトが実行されているディレクトリを返します。
  • タイマークラス関数:実行順序とイベントループの関係
  • process: 現在のプロセスと対話するためのインターフェイスを提供します
  • require: モジュールのロードを実現する
  • モジュール、エクスポート:処理モジュールのエクスポート

八、グローバルオブジェクト処理 - 1

// 1 资源: cpu 内存
// console.log(process.memoryUsage())
// console.log(process.cpuUsage())

// 2 运行环境:运行目录、node环境、cpu架构、用户环境、系统平台
/* console.log(process.cwd())
console.log(process.version)
// console.log(process.versions)
console.log(process.arch)
console.log(process.env.NODE_ENV)
// console.log(process.env.PATH)
console.log(process.env.USERPROFILE)  // HOME
console.log(process.platform) */

// 3 运行状态: 启动参数、PID、运行时间
console.log(process.argv) // 可以获取执行脚本命令传入的参数
console.log(process.argv0)  // execArgv
console.log(process.pid)   // ppid 


console.log(process.uptime()) //  脚本运行时间

ファイルの md5 暗号化の場合

md5.js

const crypto = require('crypto');
const fs = require('fs');

function md51(path) {
    
    
	let buffer = fs.readFileSync(path);
	let fsHash = crypto.createHash('sha1');

	fsHash.update(buffer);
	return fsHash.digest('hex');
}

function md52(path) {
    
    
	let buffer = fs.readFileSync(path);
	let fsHash = crypto.createHash('sha256');

	fsHash.update(buffer);
	return fsHash.digest('hex');
}
console.log(md51(process.argv[2]));
console.log(md52(process.argv[2]));

埋め込むnode md5.js 律动v0_4_3_20220808_mac_M1.zip

9、グローバルオブジェクトプロセス - 2

スクリプト実行イベント

process.on('exit', (code) => {
    
    
  console.log('exit' + code)
})

process.on('beforeExit', (code) => {
    
    
  console.log('exit' + code)
})

console.log('代码执行完了')

ここに画像の説明を挿入

process.exit() //主动退出
console.log(1111) //不会执行

おすすめ

転載: blog.csdn.net/woyebuzhidao321/article/details/124638750