Nodejs を理解する (ケース付き)

目次

1.Node.jsとは

2. Node.js でできること

3. Node.js 組み込み API

3.1、fs モジュール

3.2、パス パス モジュール

3.3、http モジュール

4. 現地サービス事例


1.Node.jsとは

        言語、ライブラリ、フレームワークではなく、js ランタイム環境です。nodejs は js コードの解析と実行が可能で、これまではブラウザのみが js コードの解析と実行を行っていましたが、現在は完全にブラウザなしで Js を実行できます。Nodejsの作者はV8エンジンをChromeに移植し、独立したjs実行環境(Nodejs)を開発しました。

        Node.js では、DOM や BOM などのブラウザー組み込み API を呼び出すことはできません。

2. Node.js でできること

        JavaScript ランタイム環境として、Node.js はいくつかの基本的な機能と API のみを提供しますが、いくつかのフレームワークとサードパーティ ライブラリを組み合わせることで、多くのリッチ アプリケーションを完成させることができます。

  1. Express フレームワーク (http://www.expressjs.com.cn/) に基づいて、Web アプリケーションをすばやく構築できます。

  2. Electron フレームワーク (https://electronjs.org/) に基づいて、クロスプラットフォームのデスクトップ アプリケーションを構築できます。

  3. restify フレームワーク (http://restify.com/) に基づいて、API インターフェイス プロジェクトをすばやく構築できます。

  4. データベースの読み取り、書き込み、操作、フロントエンド開発を支援する便利なコマンド ライン ツールの作成など...

Node.js は何を学習しますか?

Node.js組み込み API モジュール(fs、path、http など) およびサードパーティAPI モジュール(express、mysql など)

3. Node.js 組み込み API

3.1、fs モジュール

fs モジュールは Node.js が提供するファイル操作用の公式モジュールです。ファイル操作に関するユーザーのニーズを満たす一連のメソッドとプロパティを提供します。例えば:

  • 指定されたファイルの内容を読み取るために使用されるfs.readFile(path, [options,] callback)メソッド。

                パラメータ 1:ファイルのパスを示す必須パラメータ、文字列。
                パラメーター 2: オプションのパラメーター。ファイルを読み取るエンコード形式を示します。
                パラメータ 3:必須パラメータ ファイルが読み取られた後、コールバック関数を介して読み取り結果が取得されます。

        コールバック関数 (err、dataStr): 成功、err の値が null に等しい、失敗、err がエラー オブジェクト、および dataStr の値が未定義

  • fs.writeFile(file, data, [options,] callback)メソッドは、指定されたファイルにコンテンツを書き込むために使用されます。

                パラメータ 1:必須パラメータです。ファイルのストレージ パスを示すファイル パスの文字列を指定する必要があります。
                パラメータ 2:必須パラメータで、書き込む内容を示します。
                パラメーター 3: ファイル コンテンツを書き込む形式を示すオプションのパラメーターで、既定値は utf8 です。
                パラメーター 4:必須パラメーター、ファイルが書き込まれた後のコールバック関数。

        コールバック関数 (err): 成功すると、err の値は null に等しくなり、失敗すると、err の値はエラー オブジェクトに等しくなります

//导入内置模块
const fs = require('fs')

//读文件
fs.readFile('./path',function(err,dataStr){
    if(err)  {
       return console.log('文件读取失败'+ err.message) 
    } 
    console.log(dataStr)

})

//写文件
fs.writeFile('./path','String',function(err){
    if(err){
        return console.log('文件写入失败!' + err.message)
    }
    console.log('文件写入成功!')
})

3.2、パス パス モジュール

path モジュールは Node.js が公式に提供している、パスを扱うためのモジュールです。ユーザーのパス処理要件を満たす一連のメソッドと属性を提供します。例えば:

  • 複数のパス フラグメントを完全なパス文字列に結合するために使用される path.join()メソッド
  •  path.basename(path [,ext])メソッドは、パス文字列からファイル名を解析するために使用されます    

                        path <string>パス文字列を示す必須パラメーター
                        ext <string> ファイル拡張子を示すオプションのパラメーター
                        戻り値: <string> はパスの最後の部分を示します

  •  path.extname(path) は、パスの拡張部分を取得できます

3.3、http モジュール

http モジュールはサーバーを作成し、Web サービスを外部に提供します。ステップ:

  1. http モジュールのインポート
  2. Web サーバー インスタンスを作成する
  3. リクエスト イベントをサーバー インスタンスにバインドし、クライアントのリクエストをリッスンする
  4. サーバーを起動
const http =require('http')

const server = http.createServer()
// req 是请求对象,包含了与客户端相关的数据和属性
// res 是响应对象,包含了与服务端相关的数据和属性
server.on(require,(req,res)=>{    
    // req.url 是客户端请求的 URL 地址,req.method 是客户端请求的 method 类型
    const url = req.url
    const method = req.method

    const str = `Your request url is ${url}, and request method is ${method}`
    
    // 调用 res.setHeader() 方法,设置 Content-Type 响应头,解决中文乱码的问题
    res.setHeader('Content-Type', 'text/html; charset=utf-8')
    // 调用 res.end() 方法,向客户端响应一些内容
    res.end(str)
})

server.listen(80,()=>{
    console.log('server running at http://127.0.0.1')
})

4. 現地サービス事例

アクセスが必要です: 127.0.0.1 または 127.0.0.1/clock.html は時計です; アクセス: 127.0.0.1/g2048.html は 2048 ゲームです; その他へのアクセスは 404 です

 

実装原理: http モジュールを使用してフロントエンド クライアントから要求されたアドレスを監視し、アドレスに従ってファイル モジュールを介して対応するファイルを読み取り、クライアントに返します。

ケース構成:

        

 どこ index.js

//导入相应模块
const http = require('http')
const fs = require('fs')
const path =require('path')

const server =http.createServer()

server.on('request',function(req,res){
    const url = req.url
    console.log(url);
    
    if(url==='/'||url==='/clock.html'){
        //当访问 '/' 或 '/clock.html' 时,读取的地址是一样的
        const fpath = path.join(__dirname,'./clock.html')
        fs.readFile(fpath, 'utf8', (err,dataStr)=>{
            if(err) {
                //若返回的是中文需要添加响应头,不然会乱码
                res.setHeader('Content-Type', 'text/html; charset=utf-8')
                return res.end('文件读取错误')
            }
            res.end(dataStr)
        })
    }else if(url==='/g2048.html' || url==='/c2048.css'||url==='/j2048.js'){
        //当html文件内链了其他文件,如css,js时,浏览器会主动像服务器进行资源的请求
        //在浏览器输入 /g2048.html 访问2048 页面时,实际访问了/g2048.html,/c2048.css ,/j2048.js 三个文件
        //注意path地址拼接的区别
        const fpath = path.join(__dirname,'js2048',url)
        fs.readFile(fpath,'utf8',(err,dataStr)=>{
            if(err) {
                res.setHeader('Content-Type', 'text/html; charset=utf-8')
                return res.end('文件读取错误')
            }
            res.end(dataStr)
        })
    }else{
        //英文不需要添加响应头
        res.end('404 Not Found.')
    }
})

server.listen(80,function(){
     console.log('server listen at http://127.0.0.1');
})

時計.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="clock">
        <p id="date" class="date"></p>
        <p id="time" class="time"></p>
        <div id="text">内置模块[fs path http]的使用</div>
    </div>
</body>
<script>
    const week = ['周日','周一','周二','周三','周四','五','周六'];
    // const cd=new Date();
   
    let timeID = setInterval(updateTime,1000)
    updateTime();

    function updateTime(){
        var cd=new Date();
        console.log(cd);
        
        document.getElementById('time').innerHTML=zeroPadding(cd.getHours(),2) + ":" +zeroPadding(cd.getMinutes(),2)+':'+zeroPadding(cd.getSeconds(),2);
        document.getElementById('date').innerHTML=zeroPadding(cd.getFullYear(),4) + "-" +zeroPadding(cd.getMonth()+1,2)+'-'+zeroPadding(cd.getDate(),2)+'  '+week[cd.getDay()];

    }
    
    function zeroPadding(num,digit){
        let zero='';
        for (let i=0;i<digit;i++){
            zero+='0'
        };
        return (zero+num).slice(-digit);
    }

</script>
<style>
    html,body{
        height: 100%;
        margin:0;
        padding: 0;
        box-sizing: border-box;
    }
    body{
        background: #0f3854;
        background: radial-gradient(ellipse at center,#0a2e38 0%,#000000 70%);
        background-size: 100%;
    }
    p {
        margin: 0;
        padding: 0;
    }
    #clock {
        font-family: 'Share Tech Mono', monospace;
        color: #ffffff;
        text-align: center;
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
        color: #daf6ff;
        text-shadow: 0 0 20px rgba(10, 175, 230, 1),  0 0 20px rgba(10, 175, 230, 0);
        
    }
    #clock .time {
            letter-spacing: 0.05em;
            font-size: 80px;
            padding: 5px 0;
        }
    #clock .date {
            letter-spacing: 0.1em;
            font-size: 24px;
        }
    #clock .text {
            letter-spacing: 0.1em;
            font-size: 15px;
            padding: 20px 0 0;
        }

</style>
</html>

 JavaScript ゲーム 2048-Javascript ドキュメント リソース-CSDN ダウンロード

フロントエンド Web サイト (エクストラネット) の推奨: https://codepen.io/ 

おすすめ

転載: blog.csdn.net/qq_41045128/article/details/125587305