3月から、UI開発に関する新しいタスクを受けました。使用するのはAngularJS、Express JSなどの技術です。そこで週末に新しい技術を学びました。
グループ内の製品UIアーキテクチャは次のとおりです。

そのうちフロントエンドは、主にAngularJSフレームワークを使用し、さらに連携するのはBootstrap提供される多くのコントロールおよびJQueryです。バックエンドは主にExpress JSで構築されたWeb Serverです。Express JSはNginxと組み合わせて使うと非常に便利です。
これにより、プロジェクトが忙しくないときに、AngularJSとExpress JSを学ぶ時間と興味ができました。
同時に、AngularJS + Express JSの最も簡単なWebサイトのサンプルを実装しました。
一. AngularJS
AngularJSは、Googleの従業員によって開発され、その後Googleによって維持されているプロジェクトです。最新版1.4と安定版1.3.15はhttps://angularjs.org/からダウンロードできます。AngularJSを学ぶには、次のサイトを訪れてください。AngularJS チュートリアル 。
簡単に言うと、AngularJSはフロントエンドで動作するJavascriptフレームワークです。その2つの大きな特徴は、ディレクティブHtmlを拡張し、さらに式データをHtmlにバインドします。また、コントローラー、Filterフィルター、Factoryなどのサービスを提供します。
AngularJSはフロントエンドで動作するため、あらゆるサーバー技術と組み合わせることができますExpress JSとの組み合わせはとても良いです。
AngularJSは、静的WebページでDOMを操作する際の欠点を解決するために生まれました。動的Webアプリケーションの開発に適しています。
AngularJSの仕組みは下の図で理解できます。

ここでAngularJSのいくつかの重要な概念を紹介します。
1. コントローラー(Controller)
ウェブページ内のデータを動的に操作するには、Htmlページに対してコントローラーを作成できます。コントローラーは本質的にJavascriptメソッドです。例えば、各HTMLページに対して、対応するJavascriptメソッドをコントローラーとして書き、ページ内のデータを制御できます。次のとおりです。
index.html
<!doctype html>
<html ng-app="myApp">
<head>
<script src="lib/angular-1.3.15/angular.js.html"></script>
<script src="lib/angular-1.3.15/angular-route.js.html"></script>
<script src="js/controller.js.html"></script>
<script src="js/angularMainApp.js.html"></script>
</head>
<body ng-view>
<div>
<p>Hello {{name}}</p>
</div>
</body>
</html>
これはAngularJSのコントロールで書かれたページで、AngularJSのappをmyAppと指定しています。その中の式、{{name}}に注目してください。nameは動的変数です。ではnameの値はどこから来るのでしょうか?対応するコントローラーでnameに値を代入する必要があります。そうすればユーザーがindex.htmlページにアクセスしたときにnameの実際の値を見ることができます。
controller.js
// Declare angular JS level module wich depends on filters, and services
var myControllers = angular.module('myControllers', []);
// controller
myControllers.controller('indexContrl', ['$scope', function ($scope) {
$scope.name = "Kevin";
}]);
controller.jsでは、indexContrlというコントローラーを定義し、このコントローラーがindex.html内のnameに値を代入します。もちろん、実際の開発ではコントローラーのコードは多くなるはずなので、indexContrlのような各コントローラーを個別のJSファイルに配置することをお勧めします。これにより規則的で保守しやすくなります。
ここで1つ問題があります。indexContrlはどのようにindex.htmlと関連付けるのでしょうか?AngularJSはindexContrlでindex.htmlを制御したいことをどうやって知るのでしょうか?
ここでは2つの方法があります。1つはindex.htmlで直接指定する方法です。
<div ng-controller="indexContrl">
<p>Hello {{name}}</p>
</div>
しかしこの方法は、大規模なWebサイトには面倒です。別の方法、つまりAngularJSの別のModuleを使用することをお勧めします。ng-routeルーティング制御を行い、異なるパスに対してそれぞれのコントローラーを同じファイル内で定義します。次のとおりです。
myAngularApp.js
// Declare angular JS level module wich depends on filters, and services
var myApp = angular.module('myApp', [ 'ngRoute', 'myControllers']);
// route
myApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when(
'/',
{
templateUrl: 'index.html',
controller: 'indexContrl'
}
).
otherwise( {
redirectTo: '/404'
});
}
]);
注意すべき点は、myAppのmoduleでng-routeを参照し、同時にファイル内でangular-route.jsファイルを参照する必要があることです。そうしないと機能しません。
これで、index.htmlページ内のデータはindexContrl関数によって制御されます。これは単なる簡単なDemoであり、より多くの機能についてはドキュメントを参照してください。
2. Filterフィルター
AngularJSはフィルター機能を提供します。本質的には、ページに出力するデータをフォーマットするための一般的なメソッドを定義します。非常に便利です。
開発時には個別のFilter.jsファイルに配置することをお勧めします。
3. Factoryサービス
これも一般的なメソッドをサービスとして定義させてくれます。ただし、すべてのサービスは遅延インスタンス化され、使用時または依存されたときだけインスタンス化され、すべてシングルトンです。
開発時には個別のFactory.jsファイルに配置することをお勧めします。
二. Express JS
サンプルのフロントエンドでは、AngularJSフレームワークを使用してHtmlページと対応するJSファイルを開発しました。しかし、Webサイトのバックエンドには別の技術が必要です。Node.jsをバックエンドに使うなら、それは簡単で、http.createServerで十分です。しかし実際のWebサイト開発では、Express JSの方が適しています。
Express JSは現在最も人気のあるNode.jsベースのWeb開発フレームワークです、session、cookieなどのさまざまなモジュールを提供し、完全な機能を備えたWebサイトをすばやく構築できます。
本質的に、Express JSはNode.js組み込みのhttpモジュールに基づいています開発されています。
Express JSはNginxリバースプロキシサーバーと組み合わせると非常に便利です。
ここでExpress JSには重要な概念があります。それはミドルウェア(middleware)Express JSや他のモジュールが提供する多くのモジュールをミドルウェアとしてロードして使用できます。その役割はhttpリクエストを処理することであり、1つのミドルウェアが処理し終えたら、次のミドルウェアに渡すことができます。
NPMを使用してExpress JSをダウンロードできます。
npm install express
Express JSを使用してWebサイトのバックエンドをすばやく構築したい場合は、express-generatorというツールをお勧めします。これにより、Express JSプロジェクトをすばやく作成し、必要なファイルを生成できます。
npm install -g express-generator
しかしここで、express generatorではjadeによるビューレンダリングなど、他のモジュールを多く使用していることに気付きました。やや複雑です。やはり参考にして、自分で最も簡単なExpress JSプロジェクトを構築しました。
パスは次のとおりです。

そのうちpublicフォルダーにはUI関連のファイルが配置されています。次のとおりです。

そのうちapp.jsはExpress JSの開始ファイルであり、main関数に相当します。
app.js
var express = require('express');
var http = require('http');
var path = require('path');
var routes = require('./routes/index');
var app = express();
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
http.createServer(app).listen(3000);
ここでは、Express JSを使用してserverを構築します。8行目のコードの役割はページのフォルダーを指定すること、10行目の役割はパス/に関するルーティング情報をroutesフォルダー内のindexファイルで定義することです。この2つの文の順序は間違えてはいけません。。
routes/index
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;
パス/へのアクセスに対して、publicフォルダー内のindex.htmlファイルを探しに行くという意味です。
これで1つのコマンドで、
node app.js
Webサイトを起動することができます。
三. サンプル結果とまとめ
最後にWebサイトにアクセスすると、正しい結果が表示されます。Webサイトは起動され、ページ内の変数はAngularJSコントローラーによって正しいデータに置き換えられています。

ここで小さな点を説明します。最初のテストでは、ページの変数がどうしても置き換わりませんでした。何時間もかけて、AngularJSライブラリを変え、コントローラーの書き方などを変えましたが、効果がありませんでした。最終的に資料とドキュメントを調べて、ページ内に次のものがある場合にのみ機能することがわかりました。ng-view、機能することがわかりました。そういうことだったのか。。。クソだな。。。
この記事では、非常に簡単なAngularJS + Express JSのWebサイト構築サンプルのみを紹介しています。お役に立てば幸いです。
原文:http://www.cnblogs.com/KevinSong/p/4495729.html