本教程介紹如何在 Azure 中的 Linux VM 上實現 MongoDB、Express、AngularJS 和 Node.js (MEAN) 堆棧。 通過創建的 MEAN 堆棧,可以在數據庫中添加、刪除和列出書籍。 你將學習如何執行以下操作:
創建 Linux VM
安裝 Node.js
安裝 MongoDB 并設置服務器
安裝 Express 并設置服務器的路由
使用 AngularJS 訪問路由
運行應用程序
Note
在 Azure 中國區使用 Azure CLI 2.0 之前,請先運行az cloud set -n AzureChinaCloud來改變云環境。如果想切回國際版 Azure,請再次運行az cloud set -n AzureCloud。
如果選擇在本地安裝并使用 CLI,本教程要求運行 Azure CLI 2.0.4 或更高版本。 運行az --version即可查找版本。 如果需要進行安裝或升級,請參閱安裝 Azure CLI 2.0。
創建 Linux VM
使用az group create命令創建資源組,并使用az vm create命令創建 Linux VM。 Azure 資源組是在其中部署和管理 Azure 資源的邏輯容器。
以下示例使用 Azure CLI 在“中國北部”位置創建名為myResourceGroupMEAN的資源組。 將會創建一個包含 SSH 密鑰(如果默認密鑰位置不存在這些密鑰)的、名為myVM的 VM。 若要使用一組特定的密鑰,請使用 --ssh-key-value 選項。
Azure CLI復制
azgroupcreate--namemyResourceGroupMEAN--location"China North"azvmcreate\--resource-groupmyResourceGroupMEAN \--namemyVM \--imageUbuntuLTS \--admin-usernameazureuser \--admin-password'Azure12345678!'\--generate-ssh-keysazvmopen-port--port3300--resource-groupmyResourceGroupMEAN--namemyVM
創建 VM 后,Azure CLI 顯示類似于以下示例的信息。
Azure CLI復制
{"fqdns":"","id":"/subscriptions/{subscription-id}/resourceGroups/myResourceGroupMEAN/providers/Microsoft.Compute/virtualMachines/myVM","location":"China North","macAddress":"00-0D-3A-23-9A-49","powerState":"VM running","privateIpAddress":"10.0.0.4","publicIpAddress":"13.72.77.9","resourceGroup":"myResourceGroupMEAN"}
記下publicIpAddress。 此地址用于訪問 VM。
使用以下命令來與 VM 建立 SSH 會話。 請確保使用正確的公共 IP 地址。 在上例中,我們的 IP 地址為 13.72.77.9。
bash復制
ssh azureuser@13.72.77.9
安裝 Node.js
Node.js是構建在 Chrome V8 JavaScript 引擎基礎之上的 JavaScript 運行時。 本教程使用 Node.js 來設置 Express 路由和 AngularJS 控制器。
在 VM 上,使用通過 SSH 打開的 bash shell 安裝 Node.js。
bash復制
sudo apt-get install -y nodejs
安裝 MongoDB 并設置服務器
MongoDB將數據存儲在靈活的、類似于 JSON 的文檔中。 數據庫中的字段根據文檔的不同而異,數據結構隨時可發生變化。 針對示例應用程序,我們要將包含書名、ISBN 編號、作者和頁數的書籍記錄添加到 MongoDB。
在 VM 上,使用通過 SSH 打開的 bash shell 設置 MongoDB 密鑰。
bash復制
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6echo"deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse"| sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
使用密鑰更新包管理器。
bash復制
sudo apt-get update
安裝 MongoDB。
bash復制
sudo apt-get install -y mongodb
啟動服務器。
bash復制
sudo service mongodb start
還需要安裝body-parser包,以幫助我們處理在請求中傳遞給服務器的 JSON。
安裝 npm 包管理器。
bash復制
sudo apt-get install npm
安裝正文分析器包。
bash復制
sudo npm install body-parser
創建名為Books的文件夾,并將包含 Web 服務器配置的、名為server.js的文件添加到該文件夾。
node.js復制
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.json());
require('./apps/routes')(app);
app.set('port', 3300);
app.listen(app.get('port'), function() {
console.log('Server up: http://localhost:' + app.get('port'));
});
安裝 Express 并設置服務器的路由
Express是一個微型的靈活 Node.js Web 應用程序框架,為 Web 和移動應用程序提供功能。 本教程使用 Express 將書籍信息傳入和傳出 MongoDB 數據庫。Mongoose提供簡潔的基于架構的解決方案來為應用程序數據建模。 本教程使用 Mongoose 來為數據庫提供書籍架構。
安裝 Express 和 Mongoose。
bash復制
sudo npm install express mongoose
在Books文件夾中,創建名為apps的文件夾,并添加包含所定義的 Express 路由的、名為routes.js的文件。
node.js復制
var Book = require('./models/book');
module.exports = function(app) {
app.get('/book', function(req, res) {
Book.find({}, function(err, result) {
if ( err ) throw err;
res.json(result);
});
});
app.post('/book', function(req, res) {
var book = new Book( {
name:req.body.name,
isbn:req.body.isbn,
author:req.body.author,
pages:req.body.pages
});
book.save(function(err, result) {
if ( err ) throw err;
res.json( {
message:"Successfully added book",
book:result
});
});
});
app.delete("/book/:isbn", function(req, res) {
Book.findOneAndRemove(req.query, function(err, result) {
if ( err ) throw err;
res.json( {
message: "Successfully deleted the book",
book: result
});
});
});
var path = require('path');
app.get('*', function(req, res) {
res.sendfile(path.join(__dirname + '/public', 'index.html'));
});
};
在apps文件夾中,創建名為models的文件夾,并添加包含所定義的書籍模型配置的、名為book.js的文件。
node.js復制
var mongoose = require('mongoose');
var dbHost = 'mongodb://localhost:27017/test';
mongoose.connect(dbHost);
mongoose.connection;
mongoose.set('debug', true);
var bookSchema = mongoose.Schema( {
name: String,
isbn: {type: String, index: true},
author: String,
pages: Number
});
var Book = mongoose.model('Book', bookSchema);
module.exports = mongoose.model('Book', bookSchema);
使用 AngularJS 訪問路由
AngularJS提供一個 Web 框架用于在 Web 應用程序中創建動態視圖。 本教程使用 AngularJS 將網頁與 Express 相連接,并針對書籍數據庫執行操作。
將目錄切換回到Books(cd ../..),然后創建名為public的文件夾,并添加包含所定義的控制器配置的、名為script.js的文件。
node.js復制
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
$http( {
method: 'GET',
url: '/book'
}).then(function successCallback(response) {
$scope.books = response.data;
}, function errorCallback(response) {
console.log('Error: ' + response);
});
$scope.del_book = function(book) {
$http( {
method: 'DELETE',
url: '/book/:isbn',
params: {'isbn': book.isbn}
}).then(function successCallback(response) {
console.log(response);
}, function errorCallback(response) {
console.log('Error: ' + response);
});
};
$scope.add_book = function() {
var body = '{ "name": "' + $scope.Name +
'", "isbn": "' + $scope.Isbn +
'", "author": "' + $scope.Author +
'", "pages": "' + $scope.Pages + '" }';
$http({
method: 'POST',
url: '/book',
data: body
}).then(function successCallback(response) {
console.log(response);
}, function errorCallback(response) {
console.log('Error: ' + response);
});
};
});
在public文件夾中,創建包含所定義的網頁的、名為index.html的文件。
html復制
運行應用程序
將目錄切換回到Books(cd ..),并通過運行以下命令啟動服務器:
bash復制
nodejs server.js
打開 Web 瀏覽器并導航到針對 VM 記錄的地址。 例如http://13.72.77.9:3300。 應顯示以下頁面所示的內容:
在文本框中輸入數據并單擊“添加”。 例如:
刷新頁面后,應會看到以下頁面所示的內容:
可以單擊“刪除”并從數據庫中刪除書籍記錄。
后續步驟
本教程已創建一個可在 Linux VM 上使用 MEAN 堆棧跟蹤書籍記錄的 Web 應用程序。 你已了解如何:
創建 Linux VM
安裝 Node.js
安裝 MongoDB 并設置服務器
安裝 Express 并設置服務器的路由
使用 AngularJS 訪問路由
運行應用程序
轉到下一教程,了解如何使用 SSL 證書保護 Web 服務器。
立即訪問http://market.azure.cn