Node Expressの使い方詳細解【インストール、使用、ルーティング、ミドルウェア、テンプレートエンジンなど】

8716 ワード

本論文の実例はNode Expressの使い方を述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
インストール

npm install --save express
基本的な使い方

//  express
var express = require('express');

//  app
var app = express();

//     
app.get('/',function( req,res ){
  res.send('index');
});

app.get('/new/:id',function( req,res ){
  res.send('news'+ res.params.id);
});

//     ,    
app.listen(3000);
ルート
expressルート

//          。
var express = require('express');

var app = express();

app.get('/',function( req,res ) {
  res.send('get  ');
});
app.post('/',function( req,res ){  
  res.send('post  ');  
});
app.listen(1221);
getとpostリクエストは全部可能です。

app.all('/',function( req,res ){
  res.send('get&post');
});
//        
app.get('/student/:id',function( req,res ){});
app.get('/:username/:id',function( req,res ){ res.write(username); res.end(id) });
文字列正規システムがあります。

//    acd   abcd
app.get('/ab?cd', function(req, res) {
 res.send('ab?cd');
});

//    abcd、abbcd、abbbcd 
app.get('/ab+cd', function(req, res) {
 res.send('ab+cd');
});

//    abcd、abxcd、abRABDOMcd、ab123cd 
app.get('/ab*cd', function(req, res) {
 res.send('ab*cd');
});

//    /abe   /abcde
app.get('/ab(cd)?e', function(req, res) {
 res.send('ab(cd)?e');
});
正規表現

//           a    :
app.get(/a/, function(req, res) {
 res.send('/a/');
});
//          ,        ,     req.params[0],req.params[1]   
app.get(/student([\d]{1})\/class([\d]{2})$/,function( req,res ){
  console.log( req.params[0],req.params[1] );
});
フォームの送信
フォームを自分のページに提出します。

/* 
  :
  /student 
    get //         // app.get('/student/:id',function(){});
    add //          // app.add('/student/:id',function(){});
    delete //        // app.delete('/student/:id',function(){});
  :web   ,     get psot    。
     ,      ,  app    。  restful    app。
*/
       
app.get('/',function( req,res ){
  res.render('form.ejs');
});
app.post('/',function( req,res ){
  res.send('form    ');
});
中間部品
中間部品はmiddlewareで、1回のフィードバックが足りません。
すべての中間部品はhttp.createServer();のフィードバックとして使われます。
中間部品の特徴:
アプリ.jsのコードは、プログラム実行時に実行され、ユーザーが来たら実行されません。ミドルウェアのコードブロックは、各ユーザが訪問する時に一回実行されます。
飛び降り現象があります。上から下に行くと、一つに合わせて実行します。二つ目は実行しません。

app.get('/',function( req,res ){ res.send('A') });    
app.get('/',function( req,res ){ res.send('B') });   //  A,     B
中間部品のコールバック関数にnextパラメータがあり、次のマッチを継続する中間部品を表します。next()を利用して、同じ要求を同時に処理します。業務を分けるnext()は、MVCに影響します。

app.get('/',function( req,res,next ){
  res.send( 'A' );
  next();
})

app.get('/',function( req,res,next ){
  res.send( 'B' );
})

//     ,     ,      。
app.get('/:username/:id',function( req,res ){
  console.log(1);
  res.send('    '+ req.params[username]);
});

app.get('/admin/login',function( req,res ){
  console.log(2);
  res.send('     ');
});
解決方法
方法1:
ルートの上下の位置を調整します。/マッチングすれば飛び降りがあります。expressの中のすべてのルートは中間部品で、具体的なルートは上に書いて、抽象的に下に書きます。

app.get('/admin/login',function( req,res ){ 
  console.log(2);
  res.send('     ');
});

app.get('/:username/:id',function( req,res ){
  console.log(1);
  res.send('    '+ req.params[username]);
});  
方法2:最後まで合わせて、最終的な道の由来があればそれに合わせます。

//  next()  ,    ,   send()  ,   。          next()

app.get('/:username/:id',function( req,res ){
  
  var username = req.paramse.username;
  //     ,  username   ,   next()
  if( usernma ) {
    console.log(1);
    res.send('    '+ req.params[username]);
  } else {
    next();
  }

});

app.get('/admin/login',function( req,res ){
  console.log(2);
  res.send('     ');
}); 

app.use()
この時はルートマッチングは行われません。全部実行されます。一般的な処理404と全体的なリターン符号化および状態の使用。

//          
app.use('/admin',function( req,res ){
  console.log(req.originUrl); // '/admin/new'
  console.log(req.baseUrl); // 'admin'
  console.log(req.path); // '/new'
  next();
});
//        '/'    
app.use('/',function( req,res ){});
app.use(function( req,res ){}); //                '/',       。
app.use(); //             。
//    app.use(); //           。 --     (  )
app.use(user);
function user( req,res,next ){   
  var filePath = req.originalUrl;
  fs.readFile('./public/'+filePath,function( err,data ){
    if( err ){
      //     
      next()
      return ;
  }
    res.send(data.toSting());
  });
}
//     
app.use(express.static('./public'));

//        ,    ,        ,    next()

//              ,       ,     。

 //        
 app.use(function( req,res,next ){
  
  res.status(200);
  res.set('Content-Type','text/html;charset=utf-8');
  next();

});
//404 
app.use(function( req,res ){
  res.status(404);
  res.send('sorry');
});
レンダー()&send()
ほとんどの場合、レンダリング内容はres.render()で、viewのテンプレートファイルによってレンダリングされます。viewフォルダを使いたくないなら、他の名前を使います。

app.set('views','static');  

send(); //     Content-Type    200   。  mime  。 send()   end()   。
get&post
get要求のパラメータはurlであり、元のnodeでは、urlモジュールを使用してパラメータ文字列を識別する必要があり、expressではurlモジュールを使用する必要がない。req.queryオブジェクトは直接使用できます。
ポスト要求はexpressで直接取得できないので、body-parserモジュールを使用しなければなりません。使用後、req.bodyでパラメータを得ることができます。しかし、フォームにファイルアップロードが含まれている場合は、やはりformidable を使用する必要があります。
ポストが使用する第三者モジュール:body-parserformidable

var express = require('express');
var bodyParser = require('body-parser');
var app = express();

//     
app.set('view engine','ejs');
app.use(bodyParser.urlencoded({ extended: false }));

// router
app.get('/',function( req,res ){
 res.render('form.ejs');
});

app.post('/',function( req,res ){
 console.log(req.body);
}); 
静止化ファイルexpres.static(root);/rootパラメータを使用すると、静的リソースファイルが存在するルートディレクトリを意味します。

// app.use                  ,     ,          
app.use(express.static('./static'));
app.use('page',epxress.static('./static')); // page/index.html 
テンプレートエンジン
expressと結合するテンプレートはjadeejsです。
(ejs)[https://www.npmjs.com/package/ejs%5D

var express = require('express');
var app = express();

//       ,   ejs
app.set('view engine','ejs');

//   
app.get('/',function( req,res ){
  //render:       ,  。
  res.render('index.ejs',{
    'name': [ting,daie]
  });
});  
app.listen(1221);
対応するテンプレートは以下の通りです。

<ul>
  <%
    for( var i=0; i<name.length; i++ ){
  %>
    <li><%=name[i]%></li>
  <%
    }
  %>
</ul>
デフォルトのビューフォルダ、views。デフォルトのapp.set('views','./shitu');を使いたくないなら
ここで述べたように皆さんのnode.jsプログラムの設計に役に立ちます。