nodejsを実行します
最初のステップは、もちろんnodejs環境をインストールすることです。 WindowsがNodejsのより速いインストールを備えているため、直接ダウンロードできます。
http://www.nodejs.org/download/
必要に応じてダウンロードしてください。ダウンロードが完了したら、次のステップに進みます。その後、nodejs環境があります。
2番目のステップは、後続の操作を促進するために、Disk Dにフォルダブログを直接見たことです。
次に、Windowsコマンドラインツールを開き、Dディスクを入力し、以下を入力します。
次のようにコードをコピーします:Express -Eブログ
その後、内部に依存関係パッケージがある場合があります。インストールするにはブログディレクトリを入力する必要があります(インストール構成はpackage.jsonによって提供されます):
次のようにコードをコピーします:npmインストール
このようにして、パッケージとJavaパッケージファイルに依存する依存関係パッケージをダウンロードし、.NET BLLファイルはコンセプトである必要があります
この時点で、私たちのプログラムは実行する準備ができています:
次のようにコードをコピーします:ノードアプリ
次のようにコードをコピーします:D:/blog>ノードAppExpressサーバーがポート3000で聞いています
この時点で、ブラウザを開くと応答があります。
ここでは、Express(人気のNodeJSWEB開発フレームワーク)を使用して、EJSテンプレートエンジンを使用しています
ファイル構造
初期化ファイルディレクトリ構造は次のとおりです。
App.jsはエントリファイルです
package.jsonはモジュール依存関係ファイルです。 NPMインストールを使用すると、構成に応じて関連するパッケージをオンラインでダウンロードします。
node_modulesはダウンロードされたモジュールファイル(package.json)です
静的リソースファイル
ルーティングファイルを保存します
ビュー関連のビューテンプレートファイルを保存します
このようにして、基本的なディレクトリ構造が発表されます。ここでnode_modulesディレクトリについて簡単に説明しましょう。
node_modules/ejs
ダウンロードされたモジュールはここに保存されていると言いました。率直に言って、それはJSファイルのコレクションです
コードコピーは次のとおりです。
var parse = exports.parse = function(str、options){
var options = options || {}
、open = options.open || Exports.open || '<%'
、close = options.close || exports.close || '%>'
、filename = options.filename
、compiledebug = options.compiledebug!== false
、buf = "";
buf += 'var buf = [];';
if(false!== options._with)buf += '/nwith(locals || {}){(function(){';
buf += '/n buf.push(/' ';
var lineno = 1;
var Consumptioneol = false;
for(var i = 0、len = str.length; i <len; ++ i){
var stri = str [i];
if(str.slice(i、open.length + i)== open){
i += open.length
var prefix、postfix、line =(compiledebug? '__stack.lineno =': '') + lineno;
switch(str [i]){
case '=':
prefix = "'、Escape((" + line +'、 ';)
postfix = "))、 '";
++ i;
壊す;
場合 '-':
prefix = "'、(" + line +'、 ';
postfix = ")、 '";
++ i;
壊す;
デフォルト:
prefix = "');" + line + ';';
postfix = "; buf.push( '";
}
var end = str.indexof(close、i)
、js = str.substring(i、end)
、start = i
、include = null
、n = 0;
if( ' - ' == js [js.length-1]){
js = js.Substring(0、Js.Length -2);
CONSUNEOL = true;
}
if(0 == js.trim()。indexof( 'include')){
var name = js.trim()。スライス(7).trim();
if(!filename)スロー新しいエラー( 'filenameオプションはinclude'に必要です ');
var path = ResolveInclude(name、filename);
include = read(path、 'utf8');
include = exports.parse(include、{filename:path、_with:false、open:open、close:compiledebug:compiledebug});
buf + = "' +(function(){" + include + "})() +'";
js = '';
}
while(〜(n = js.indexof( "/n"、n)))n ++、lineno ++;
if(js.substr(0、1)== ':')js = filtered(js);
if(js){
if(js.lastindexof( '//')> js.lastindexof( '/n'))js += '/n';
buf += prefix;
buf += js;
buf += postfix;
}
i + = end -start + close.length -1;
} else if(stri == "//"){
buf += "////";
} else if(stri == "'"){
buf += "// '";
} else if(stri == "/r"){
// 無視する
} else if(stri == "/n"){
if(consheeol){
ConsumeOL = false;
} それ以外 {
buf += "// n";
リネノ++;
}
} それ以外 {
buf += stri;
}
}
if(false!== options._with)buf += "');})(); /n} /nreturn buf.join(' ');";
else buf += "');/nreturn buf.join(' ');";
bufを返します。
};
ここで使用したEJSテンプレートとExpressモジュールと同じように、違いが何であるかを確認するために、EJSプログラムに不思議なことに歩いて行きました。
ejs.jsのオープニング後、読むためにいくつかのコードを描画します。このコードに精通しています。アンダースコアのテンプレートエンジンコードと一致しており、どちらもテンプレートを文字列に解析します。
次に、評価方法または新しい関数メソッドを介して関数に変換し、解析のために独自のデータオブジェクトに渡します。
特定のワークフローに関しては、まだわからないので、後の勉強のポイントにしか置くことができません。さて、今すぐ他のモジュールに行きましょう。
app.js
エントリファイルとして、app.jsは重要な役割を果たします。
コードコピーは次のとおりです。
/**
*モジュールの依存関係。
*/
var Express = require( 'Express');
var routes = require( './ routes');
var user = require( './ routes/user');
var http = require( 'http');
var path = require( 'path');
var app = Express();
//すべての環境
app.set( 'port'、process.env.port || 3000);
app.set( 'views'、path.join(__ dirname、 'Views'));
app.set( 'View Engine'、 'ejs');
app.use(express.favicon());
app.use(express.logger( 'dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodoverride());
app.use(app.router);
app.use(express.static(path.join(__ dirname、 'public')));
//開発のみ
if( 'development' == app.get( 'env')){
app.use(express.errorhandler());
}
app.get( '/'、routes.index);
app.get( '/users'、user.list);
http.createserver(app).listen(app.get( 'port')、function(){{
console.log( 'ポートでリスニングするサーバーを聴く' + app.get( 'port'));
});
ExpressおよびHTTPモジュールをrequire()コマンドを介してロードし、Routesディレクトリにインデックスユーザーとその他のテンプレートファイルをロードします
app.set( 'port'、process.env.port || 3000)は、スタートアップのポートです
app.set( 'Views'、__dirname + '/views')は、テンプレートファイルを保存するパスです。 __dirnameはグローバル変数であり、現在のスクリプトがあるディレクトリを保存します。このように見ることができます:
コードコピーは次のとおりです。
console.log(__ dirname); // index.js次のコードを追加します
/**
D:/blog>ノードアプリ
Express Server Li
D:/ブログ/ルート
*/
この__dirnameがどのように取得されたかについては、当分の間それに注意を払う必要はありません
App.set( 'View Engine'、 'EJS')テンプレートエンジンをEJSに設定します
app.use(express.favicon())は、アイコンを設定して変更し、次に一般に画像ファイルを作成できます。
app.use(express.logger( 'dev')); Expressは接続に依存し、組み込みのミドルウェアはいくつかのログを出力します。
app.use(express.json());文字列がJSONオブジェクトに動的に変換されるリクエスト本体を解析するために使用されます
app.use(express.methodoverride());内蔵のミドルウェアを接続して、投稿リクエストを処理し、Putやその他のHTTPメソッドを偽装することができます
app.use(app.router);ルーター解像度ルールを呼び出します
app.use(express.static(path.join(__ dirname、 'public')));内蔵のミドルウェアを接続し、ルートディレクトリで公開され、静的ファイルを保存する
コードコピーは次のとおりです。
if( 'development' == app.get( 'env')){
app.use(express.errorhandler());
}
この文は、開発条件下でエラー情報を出力する必要があることを意味します
コードコピーは次のとおりです。
app.get( '/'、routes.index);
app.get( '/users'、user.list);
これらの2つの文は、アクセス時間に特定の処理ファイルです。たとえば、ここから直接アクセスする場合、デフォルトのアクセスはroutes.indexです。
その後、実際には、内部のテンプレートデータを解析します。
コードコピーは次のとおりです。
exports.index = function(req、res){
console.log(__ dirname);
res.Render( 'index'、{title: 'Express'});
};
最後に、上記のコードが呼び出され、HTTPサーバーを作成してポート3000をリッスンします。成功後、Webページでアクセスできます。
ルーティング
この方法を使用してルートを構築しました
コードコピーは次のとおりです。App.get( '/'、routes.index);
上記のコードはこのコードに置き換えることができます(アプリで書かれています)
コードコピーは次のとおりです。
app.get( '/'、function(req、res){
res.Render( 'index'、{title: 'Express'});
});
このコードは、ホームページにアクセスするときに、EJSテンプレートエンジンがindex.ejsテンプレートファイルをレンダリングするために呼び出されることを意味します。
今、いくつかの変更を加えます。上記のコードはルーティング関数を実装していますが、ルーティング関連のコードをアプリに入れることはできません。ルートが多すぎると、アプリが肥大化するため、関連する構成をインデックスに入れます
そのため、アプリの関連するルーティング関数を削除し、アプリの最後にコードを追加します。
コードコピーは次のとおりです。routes(app);
次に、index.jsを変更します
コードコピーは次のとおりです。
module.exports = function(app){
app.get( '/'、function(req、res){
res.Render( 'index'、{title: 'Express'});
});
};
このコードがどのように整理されているかはまだ明確ではないので、もう注意を払うことはありません。後で見てみましょう
ルーティングルール
Expressは複数のHTTPリクエストをカプセル化し、通常はGet/Post 2を使用します
コードコピーは次のとおりです。
app.get();
app.post();
最初のパラメーターはリクエストパス、2番目のパラメーターはコールバック関数、または2つのパラメーターがリクエストと応答です
次に、Req(リクエスト)には、次のルールがあります
req.QueryハンドルGETリクエストを取得し、Get Requestパラメーターを取得します
req.params handles /:xxx form getまたはpost request
Req.BodyはPOSTリクエストを処理し、POSTリクエスト本文を取得します
req.paramsハンドルget and post requestsを処理しますが、検索の優先順位はreq.params-> req.body-> req.queryです
パスルールも規則性をサポートします。詳細については後で説明します...
ルーティングルールを追加します
存在しないリンクにアクセスするとき:
/yのルーティングルールがないため、彼はファイルを公開していないので、404です
次に、index.jsに関連するルートを追加します。
コードコピーは次のとおりです。
module.exports = function(app){
app.get( '/'、function(req、res){
res.Render( 'index'、{title: 'Express'});
});
app.get( '/y'、function(req、res){
res.send( 'ye xiaochai');
});
};
ここに私は文字化けしたページを持っています:
その理由は、ダウンロード後、私のファイルがGBKエンコードであるためです。 UTF-8に変更する必要があります。テンプレートエンジンは気にしません。次のセクションに行きましょう。
登録機能
ここでは、元のブロガーに従って簡単な登録関数を実行し、Mongo DBをデータベースとして使用してから、関数を順番に改善します。
新しいレジスタルートを作成して、新しいレジスタテンプレートを作成するので、始めましょう
indexに新しいルートを作成します
コードコピーは次のとおりです。
app.get( '/Register'、function(req、res){
Res.Render( 'Index'、{title: 'Register Page'});
});
コードコピーは次のとおりです。
module.exports = function(app){
app.get( '/'、function(req、res){
res.Render( 'index'、{title: 'Express'});
});
app.get( '/y'、function(req、res){
res.send( 'ye xiaochai');
});
app.get( '/Register'、function(req、res){
Res.Render( 'Register'、{title: 'Register Page'});
});
コードコピーは次のとおりです。
<!doctype html>
<html>
<head>
<title> <%= title%> </title>
<link rel = 'styleSheet' href = '/styleSheets/style.css'/>
</head>
<body>
<h1> <%= title%> </h1>
<form method = "post">
<div> username:<入力型= "text" name = "name"/> </div>
<div>パスワード:<入力タイプ= "パスワード" name = "password"/> </div>
<div> <入力タイプ= "submit" value = "login"/> </div>
</form>
</body>
</html>
このようにして、私たちのページが形成されます:
基本プログラムを使用すると、データベースサポートが必要になるので、MongoDB環境をインストールする必要があります
mongodb
MongoDBは、分散ファイルストレージに基づいたNOSQLです。 C ++で書かれています。 MongoDBがサポートするデータ構造は、JSONと同様に緩んでいます。 JSONはあらゆるタイプをサポートできることを知っているため、非常に複雑な構造を作成できます。
コードコピーは次のとおりです。
{
ID:1、
名前:「Ye Xiaochai」、
FRINDS:[
{id:2、name: 'su huanzhen'}、
{id:3、name: 'one-page book'}
]
}
mongodbをインストールします
まず、http://www.mongodb.org/downloadsに移動してインストールファイルをダウンロードし、ファイルをDディスクにコピーしてMongodbの名前を変更し、内部に新しいブログフォルダーを作成します
次に、コマンドラインツールを開き、ディレクトリをビンに切り替えて入力します。
次のようにコードをコピーします:mongod -dbpath d:/mongodb/blog
ブログフォルダーをプロジェクトディレクトリに設定し、データベースを開始します。便利なため、コマンドを書き、直接クリックしてデータベースを起動します。
コードを次のようにコピーします:d:/mongodb/bin/mongod.exe -dbpath d:/mongodb/blog
Mongodbへのリンク
データベースが正常にインストールされた後、私たちのプログラムは、データベースをリンクするための関連する「ドライバー」プログラムも必要です。もちろん、パッケージをダウンロードする必要があります...
Package.jsonを開いて、依存関係に新しいラインを追加します
コードコピーは次のとおりです。
{
「名前」:「アプリケーション名」、
「バージョン」:「0.0.1」、
「プライベート」:本当、
「スクリプト」:{
「start」:「node app.js」
}、
「依存関係」:{
「Express」:「3.4.8」、
「ejs」: "*"、
「mongodb」:「*」
}
}
次に、NPMインストールを実行して、新しい依存関係パッケージをダウンロードします。これにより、MongoDBに関連するドライバーが利用可能です。 MySQLおよびその他のデータベースをリンクするには、その他の依存関係パッケージが必要です。
現時点では、データベース接続情報を保存するために、ルートディレクトリにsett.jsファイルを作成します
コードコピーは次のとおりです。
module.exports = {
CookieSecret:「myblog」、
DB:「ブログ」、
ホスト:「localhost」
};
DBはデータベース名、ホストはデータベースアドレス、CookieSecretはCookie暗号化に使用され、データベースとは何の関係もありません
次に、ルートディレクトリに新しいモデルフォルダーを作成し、モデルフォルダーに新しいDB.JSを作成します
コードコピーは次のとおりです。
var settings = require( '../ settings')、
db = require( 'mongodb')。db、
接続= require( 'mongodb')。接続、
server = require( 'mongodb')。server;
module.exports = new db(settings.db、new Server(settings.host、connection.default_port)、{safe:true});
コードコピーは次のとおりです。新しいdb(settings.db、new Server(settings.host、connection.default_port)、{safe:true});
データベースインスタンスを作成してModule.Exportsを介してインスタンスをエクスポートするためにデータベース名、データベースアドレス、およびデータベースポートを設定して、データベースを必要として読み書きできるようにします。
データベースに正常に書き込む必要があり、サーバー側のプログラムは投稿情報を処理する必要があるため、モデルフォルダーに新しいuser.jsを作成します
コードコピーは次のとおりです。
var mongodb = require( './ db');
function user(user){
this.name = user.name;
this.password = user.password;
};
module.exports = user;
//ユーザー情報の保存
user.prototype.save = function(callback){
//データベースに保存されるユーザードキュメント
var user = {
名前:this.name、
パスワード:this.password
};
//データベースを開きます
mongodb.open(function(err、db){
if(err){
return callback(err); //エラー、ERR情報を返します
}
//ユーザーコレクションを読んでください
db.collection( 'users'、function(err、collection){
if(err){
mongodb.close();
return callback(err); //エラー、ERR情報を返します
}
//ユーザーデータをユーザーコレクションに挿入します
collection.insert(user、{
安全:本当
}、function(err、user){
mongodb.close();
if(err){
return callback(err); //エラー、ERR情報を返します
}
callback(null、user [0]); //成功! errはnullで、保存されたユーザードキュメントを返します
});
});
});
};
コードコピーは次のとおりです。
//ユーザー情報を読んでください
user.get = function(name、callback){
//データベースを開きます
mongodb.open(function(err、db){
if(err){
callbackを返します(err); //エラー、err情報を返します
}
//ユーザーコレクションを読んでください
db.collection( 'users'、function(err、collection){
if(err){
mongodb.close();
callbackを返します(err); //エラー、err情報を返します
}
//ユーザー名(名前キー)値のドキュメントを見つける
collection.findone({
名前:名前
}、function(err、user){
mongodb.close();
if(err){
callbackを返します(err); //失敗! ERR情報に戻ります
}
callback(null、user); // success!クエリユーザー情報を返します
});
});
});
};
ここでは、1つはデータを書き、もう1つはデータを読み取ります。プロセッサがあります。次に、index.jsの前に次のプログラムを追加する必要があります。
コードコピーは次のとおりです。varuser = require( '../ models/user.js');
app.post( '/Register')を変更する
コードコピーは次のとおりです。
App.Post( '/Register'、function(req、res){
var name = req.body.name;
var pwd = req.body.password;
var newuser = newユーザー({
名前:名前、
パスワード:PWD
});
newuser.save(function(err、user){
//関連操作、書き込みセッション
res.send(user);
});
});
次に、クリックして登録すると反応があります
現時点でデータベースに書き込むかどうかを判断できない場合は、クエリのためにデータベースを入力して、最初にデータベースディレクトリに切り替えることができます
次のようにコードをコピーします:/mongodb/bin>
入力:
次のようにコードをコピーします:Mongo
次に、データベースを切り替えてブログに接続します
次のようにコードをコピーします。ブログを使用します
最後の入力
次のようにコードをコピーします:db.users.find()
私たちは皆、データが記述されているのを喜んで見たので、今日の学習は当分の間終わりました
結論
今日、私たちはブログに従って、インストールからライティング、データベースまでの操作を完了しました。明日他の側面を追加し、徐々にnodejsの学習を深めましょう。