尝试使用Angular构建一个基本的MEAN应用
MEAN是什么意思?
LAMP(Linux、Apache、MySQL、MariaDB、Perl、PHP、Python)是一种类似软件捆绑包的技术组合。
-
- M:MongoDB(jsonを扱うことができるドキュメント指向DB)
-
- E:Express(Node.js上で動作するバックエンドフレームワーク)
-
- A:AngularJS(フロントエンドjsフレームワーク)
- N:Node.js(サーバサイドjs環境)
我认为从各个要素来看,可以明白JavaScript是开发所需唯一的特征。但是,因为使用了Node.js,所以可能不太适合构建大规模系统。
今回やる事
-
- MEANを構築
-
- AはAngularJSではなく、Angular(4.x.x)を使う
- angular-cliを利用してAngularのプロジェクトを作成してから構築
MEAN中的N:Node.js
安装
“Node.js的版本管理可在以下文章中找到详细的安装方法。使用nodist。”
请确保在此时使用nodist版本为6.9.x,并且npm版本为3.x.x以上(这是在使用Angular时所需的版本)。
A的含义:Angular
创建项目
首先安装Angular CLI。
npm install -g @angular/cli
当您完成安装后,便可以创建项目。
ng new mean-test
由于mean-test是项目名,因此可以更改为任何名称都可以。
由于所需的软件包将自动在npm上安装,所以这可能需要一些时间。
ここまで完了したら、作成したプロジェクトのディレクトリ(mean-test)の中に移動して、以下のコマンドでとりあえずAngularの起動確認をしてみます。
※以降はカレントディレクトリがmean-testになっていることを前提に進めます。
ng serve --open
–添加“open”选项后,localhost:4200会自动在浏览器中打开。
如果以这样的方式显示,就可以了。
MEAN的E:表达
安装
作成したプロジェクトのディレクトリ(mean-test)の中に移動して、Expressをインストールします。
npm install --save express
起動設定
一旦安装完成后,创建一个server.js文件。
// 使用するライブラリの読み込み
const express = require('express');
const path = require('path');
const http = require('http');
// api.js(サーバサイドの処理スクリプト)の読み込み
const api = require('./server/routes/api');
// expressの初期化
const app = express();
// 静的ファイルパスの設定
// ビルド後のAngularのパスを設定する
app.use(express.static(path.join(__dirname, 'dist')));
// /apiでアクセスしたときはapi.jsを表示
app.use('/api', api);
// 任意のURLでアクセスしたときはdist/index.html(Angularのindex.html)を表示
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/index.html'));
});
/**
* ポート設定
*/
const port = process.env.PORT || '3000';
app.set('port', port);
/**
* HTTPサーバの作成
*/
const server = http.createServer(app);
/**
* ポート監視を開始する
*/
server.listen(port, () => console.log(`API running on localhost:${port}`));
另外,我也会创建server/routes/api.js文件。
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.header('Content-Type', 'text/plain;charset=utf-8');
res.send('これはサーバサイドスクリプトだよ');
});
module.exports = router;
如果您已经完成到这一步,可以使用以下命令在node.js上运行server.js。
node server.js
若在本地3000端口启动HTTP服务器并显示“localhost:3000 上的服务器已启动”,则表示成功。
尝试从浏览器访问localhost:3000。
无论访问哪个路径,基本上都将显示dist/index.html,因此会显示类似Angular时所见的“app works!”字样。
但是,如果访问localhost:3000/api,则会执行api.js的动作。
MEAN的M:MongoDB
安装
首先,安装MongoDB。
从MongoDB Download Center下载安装程序。
启动安装程序,按照提示进行安装。
完成后,将安装文件夹内bin文件夹的路径添加到环境变量Path中,这样可以方便地从命令提示符中执行。
安装完成后,创建C:\data\db目录。
这是MongoDB数据存储路径(默认设置,可以通过配置更改)。
启动和数据创建
请使用以下命令启动MongoDB。
mongod
当MongoDB启动后,启动另一个命令提示符。
连接到MongoDB,并切换到名为test_db的数据库。
mongo
uset test_db
另外,我們創建一個集合(相當於關聯式數據庫中的表)名為users,並將數據添加到其中。
接下來,我們將使用名為mongoose的庫從Node.js調用MongoDB,但在這種情況下,命名規則將是模型名稱的小寫加上s。
因此,由於我們想將模型名稱設置為User,集合名稱將是users。
在創建集合後,我們將以json格式添加”satoh ichiro”和”suzuki jiro”作為數據。
db.createCollection('users');
db.users.insert( { last_name:'satoh', first_name:'ichiro' } );
db.users.insert( { last_name:'suzuki', first_name:'jiro' } );
可以通过以下命令确认数据是否已经注册。
db.users.find()
与Node.js的连接
首先,我們將從Node.js腳本中使用mongoose庫來連接MongoDB。首先,需要安裝mongoose。
npm install mongoose
然后,在 server/routes/api.js 文件中添加了使用 mongoose 的连接处理。本次将其显示在访问 api/user 时。
const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
// スキーマを定義
var Schema = mongoose.Schema;
var UserSchema = new Schema({
first_name: String,
last_name: String
});
mongoose.model('User', UserSchema);
// MongoDBに接続
mongoose.connect('mongodb://localhost/test_db');
var User = mongoose.model('User');
router.get('/', (req, res) => {
res.header('Content-Type', 'text/plain;charset=utf-8');
res.send('これはサーバサイドスクリプトだよ');
});
router.get('/user',(req, res) => {
// MongoDBからデータを取得
User.find({}, function(err, docs) {
res.json(docs);
});
});
module.exports = router;
最后确认
停止Node.js,然后重新启动server.js。
然后,在localhost:3000/api/user上连接,以显示刚刚注册的json数据。
(自动生成的_id也会显示)
这样一来,MEAN技术栈就基本完成了。
虽然这次只涉及到了对json的读取,但是使用mongoose,您也可以实现CRUD功能。
由于只涉及到javascript和json的处理,我想说只要了解javascript,就能编写服务器端的处理逻辑…但是我稍微接触了一下Node.js,感觉它和javascript还是有些不同,所以不能那么顺利。
请参阅
用Angular 2和Angular CLI开发MEAN App ― Scotch
轻松开发Node.js和MongoDB应用程序,使用Mongoose