Node Expressの使い方詳細解【インストール、使用、ルーティング、ミドルウェア、テンプレートエンジンなど】
本論文の実例はNode Expressの使い方を述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
インストール
expressルート
フォームを自分のページに提出します。
中間部品は
すべての中間部品は
中間部品の特徴:
アプリ.jsのコードは、プログラム実行時に実行され、ユーザーが来たら実行されません。ミドルウェアのコードブロックは、各ユーザが訪問する時に一回実行されます。
飛び降り現象があります。上から下に行くと、一つに合わせて実行します。二つ目は実行しません。
方法1:
ルートの上下の位置を調整します。/マッチングすれば飛び降りがあります。expressの中のすべてのルートは中間部品で、具体的なルートは上に書いて、抽象的に下に書きます。
この時はルートマッチングは行われません。全部実行されます。一般的な処理404と全体的なリターン符号化および状態の使用。
ほとんどの場合、レンダリング内容は
get要求のパラメータはurlであり、元のnodeでは、urlモジュールを使用してパラメータ文字列を識別する必要があり、expressではurlモジュールを使用する必要がない。
ポスト要求はexpressで直接取得できないので、
ポストが使用する第三者モジュール:
expressと結合するテンプレートは
(ejs)[https://www.npmjs.com/package/ejs%5D]
ここで述べたように皆さんのnode.jsプログラムの設計に役に立ちます。
インストール
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&postget要求のパラメータはurlであり、元のnodeでは、urlモジュールを使用してパラメータ文字列を識別する必要があり、expressではurlモジュールを使用する必要がない。
req.query
オブジェクトは直接使用できます。ポスト要求はexpressで直接取得できないので、
body-parser
モジュールを使用しなければなりません。使用後、req.body
でパラメータを得ることができます。しかし、フォームにファイルアップロードが含まれている場合は、やはりformidable
を使用する必要があります。ポストが使用する第三者モジュール:
body-parser
、formidable
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と結合するテンプレートは
jade
、ejs
です。(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プログラムの設計に役に立ちます。