Node.jsの実現は.php,.jspのサーバページ技術、自動ルーティング

5021 ワード

サーバページテクノロジーの利点
従来のサーバページ技術、例えばjsp、aspx、phpの最大の利点は隔離性が非常に良く、強制的にデカップリングし、手動でルーティングを定義する面倒を省き、ファイルパスは直接ルーティングを表し、初心者にとって非常に友好的で、nodeを見る.jsのフレームワークkoa,expressなどは,ルーティングを手動で定義する必要がある.
const Koa = require('koa')
const router = require('koa-router')()
const app = new Koa()
router.get('/home', async (ctx, next) => {
   ctx.response.body = '

Hello,Home Page

'
})

インタフェースを追加するたびにルーティングを手動で定義する必要があり、routersを抽出する必要がある.jsはこれらのルーティングを専門に定義し、頻繁に変更し、一部の開発者は簡単にファイルに論理コードを書くことができます.node.jsはページ技術を対応するjsファイルに自動的にルーティングできるかどうか、答えは肯定的だ.
Node.jsリクエストパス自動ルーティングの実装
実装手順は次のとおりです.
  • は、要求パス
  • を取得する.
  • はpathを用いる.resolveプロジェクトディレクトリに同じ名前のjsファイルがあるかどうかを検索する
  • requireはファイルを導入し、onRequest
  • のような呼び出しのために約束されたメソッド名を実装する必要があります.
  • このファイルで指定するメソッド
  • を呼び出す.
    /app.js
    const http=require("http");
    const Path=require("path");
    const Url=require("url");
    const fs=require("fs");
    
    var server=http.createServer(function (req,res){
        var relPath=Url.parse(req.url,true).pathname;
        var absPath=Path.resolve(__dirname,"."+relPath+".js")
        if(fs.existsSync(absPath)){
            var pageObj=require(absPath);
            if(pageObj.onRequest){
                pageObj.onRequest(req,res)
            }
        }
    })
    server.listen(80);
    

    /home.js
    module.exports={
        onRequest:function (req,res){
            res.end("

    Hello,Home Page

    "
    ); } }

    node app.jsが実行されたら、アクセスします.http://localhost/home
    大成功!
    ホット・アップデートの実装方法
    今は楽しくページを書くことができて、ルートが定義を忘れる心配はありませんが、jsファイルのコードを修正した後、毎回nodeを再起動してから有効になります.伝統的なページ技術はページをリフレッシュすると最新のコードを実行することができます.これはnode requireが導入したファイルモジュールがキャッシュされるので、これを実現するにはfsを祭る必要があります.watchという大殺器は、次のように実現されています.
  • モニタファイル変化
  • モジュールキャッシュ
  • を削除する.
  • 再require入って
  • コードは次のように簡単です.
    app.js
    const fs=require("fs");
    const Path=require("path");
    fs.watch(__dirname,{
       persistent: true,
       recursive: true
    },function(event,filename){
       if (event === "change") {
           let fullName=Path.resolve(__dirname,filename);
           if(Path.extname(fullName)==".js"){
             if (require.cache[fullName]) {
               require.cache[fullName] = null;;
             }
             require(fullName);
    
           }
       }
    });
    

    Node.jsサーバページ開発フレームワークの推奨
    本文の構想に基づいて、私はすでに比較的完備したNodeを実現した.js開発フレームワークwebcontextは、リクエストコンテキストパッケージ、静的ファイルサービス、逆エージェント、データベースアクセス、sesisonアクセス、ログ記録などのwebアプリケーションサーバの必須機能を実現し、好きならstarを求める
    転送ドア:github.com/windyfancy/…
    転載先:https://juejin.im/post/5ccf00eae51d453b7f0a0d44