本教程介紹如何在 Azure 中的 Linux VM 上實(shí)現(xiàn) MongoDB李丰、Express、AngularJS 和 Node.js (MEAN) 堆棧逼泣。 通過創(chuàng)建的 MEAN 堆棧趴泌,可以在數(shù)據(jù)庫中添加、刪除和列出書籍拉庶。 你將學(xué)習(xí)如何執(zhí)行以下操作:
創(chuàng)建 Linux VM
安裝 Node.js
安裝 MongoDB 并設(shè)置服務(wù)器
安裝 Express 并設(shè)置服務(wù)器的路由
使用 AngularJS 訪問路由
運(yùn)行應(yīng)用程序
Note
在 Azure 中國區(qū)使用 Azure CLI 2.0 之前嗜憔,請(qǐng)先運(yùn)行az cloud set -n AzureChinaCloud來改變?cè)骗h(huán)境。如果想切回國際版 Azure氏仗,請(qǐng)?jiān)俅芜\(yùn)行az cloud set -n AzureCloud吉捶。
如果選擇在本地安裝并使用 CLI,本教程要求運(yùn)行 Azure CLI 2.0.4 或更高版本皆尔。 運(yùn)行az --version即可查找版本呐舔。 如果需要進(jìn)行安裝或升級(jí),請(qǐng)參閱安裝 Azure CLI 2.0慷蠕。
創(chuàng)建 Linux VM
使用az group create命令創(chuàng)建資源組珊拼,并使用az vm create命令創(chuàng)建 Linux VM。 Azure 資源組是在其中部署和管理 Azure 資源的邏輯容器流炕。
以下示例使用 Azure CLI 在“中國北部”位置創(chuàng)建名為myResourceGroupMEAN的資源組澎现。 將會(huì)創(chuàng)建一個(gè)包含 SSH 密鑰(如果默認(rèn)密鑰位置不存在這些密鑰)的、名為myVM的 VM每辟。 若要使用一組特定的密鑰剑辫,請(qǐng)使用 --ssh-key-value 選項(xiàng)。
Azure CLI復(fù)制
azgroupcreate--namemyResourceGroupMEAN--location"China North"azvmcreate\--resource-groupmyResourceGroupMEAN \--namemyVM \--imageUbuntuLTS \--admin-usernameazureuser \--admin-password'Azure12345678!'\--generate-ssh-keysazvmopen-port--port3300--resource-groupmyResourceGroupMEAN--namemyVM
創(chuàng)建 VM 后渠欺,Azure CLI 顯示類似于以下示例的信息妹蔽。
Azure CLI復(fù)制
{"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 會(huì)話讹开。 請(qǐng)確保使用正確的公共 IP 地址盅视。 在上例中,我們的 IP 地址為 13.72.77.9旦万。
bash復(fù)制
ssh azureuser@13.72.77.9
安裝 Node.js
Node.js是構(gòu)建在 Chrome V8 JavaScript 引擎基礎(chǔ)之上的 JavaScript 運(yùn)行時(shí)闹击。 本教程使用 Node.js 來設(shè)置 Express 路由和 AngularJS 控制器。
在 VM 上成艘,使用通過 SSH 打開的 bash shell 安裝 Node.js赏半。
bash復(fù)制
sudo apt-get install -y nodejs
安裝 MongoDB 并設(shè)置服務(wù)器
MongoDB將數(shù)據(jù)存儲(chǔ)在靈活的、類似于 JSON 的文檔中淆两。 數(shù)據(jù)庫中的字段根據(jù)文檔的不同而異断箫,數(shù)據(jù)結(jié)構(gòu)隨時(shí)可發(fā)生變化。 針對(duì)示例應(yīng)用程序秋冰,我們要將包含書名仲义、ISBN 編號(hào)、作者和頁數(shù)的書籍記錄添加到 MongoDB剑勾。
在 VM 上埃撵,使用通過 SSH 打開的 bash shell 設(shè)置 MongoDB 密鑰。
bash復(fù)制
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復(fù)制
sudo apt-get update
安裝 MongoDB暂刘。
bash復(fù)制
sudo apt-get install -y mongodb
啟動(dòng)服務(wù)器。
bash復(fù)制
sudo service mongodb start
還需要安裝body-parser包捂刺,以幫助我們處理在請(qǐng)求中傳遞給服務(wù)器的 JSON谣拣。
安裝 npm 包管理器。
bash復(fù)制
sudo apt-get install npm
安裝正文分析器包族展。
bash復(fù)制
sudo npm install body-parser
創(chuàng)建名為Books的文件夾森缠,并將包含 Web 服務(wù)器配置的、名為server.js的文件添加到該文件夾仪缸。
node.js復(fù)制
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 并設(shè)置服務(wù)器的路由
Express是一個(gè)微型的靈活 Node.js Web 應(yīng)用程序框架辅鲸,為 Web 和移動(dòng)應(yīng)用程序提供功能。 本教程使用 Express 將書籍信息傳入和傳出 MongoDB 數(shù)據(jù)庫腹殿。Mongoose提供簡(jiǎn)潔的基于架構(gòu)的解決方案來為應(yīng)用程序數(shù)據(jù)建模独悴。 本教程使用 Mongoose 來為數(shù)據(jù)庫提供書籍架構(gòu)。
安裝 Express 和 Mongoose锣尉。
bash復(fù)制
sudo npm install express mongoose
在Books文件夾中刻炒,創(chuàng)建名為apps的文件夾,并添加包含所定義的 Express 路由的自沧、名為routes.js的文件坟奥。
node.js復(fù)制
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文件夾中树瞭,創(chuàng)建名為models的文件夾,并添加包含所定義的書籍模型配置的爱谁、名為book.js的文件晒喷。
node.js復(fù)制
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提供一個(gè) Web 框架用于在 Web 應(yīng)用程序中創(chuàng)建動(dòng)態(tài)視圖。 本教程使用 AngularJS 將網(wǎng)頁與 Express 相連接访敌,并針對(duì)書籍?dāng)?shù)據(jù)庫執(zhí)行操作凉敲。
將目錄切換回到Books(cd ../..),然后創(chuàng)建名為public的文件夾寺旺,并添加包含所定義的控制器配置的爷抓、名為script.js的文件。
node.js復(fù)制
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文件夾中阻塑,創(chuàng)建包含所定義的網(wǎng)頁的蓝撇、名為index.html的文件。
html復(fù)制
運(yùn)行應(yīng)用程序
將目錄切換回到Books(cd ..)陈莽,并通過運(yùn)行以下命令啟動(dòng)服務(wù)器:
bash復(fù)制
nodejs server.js
打開 Web 瀏覽器并導(dǎo)航到針對(duì) VM 記錄的地址渤昌。 例如http://13.72.77.9:3300。 應(yīng)顯示以下頁面所示的內(nèi)容:
在文本框中輸入數(shù)據(jù)并單擊“添加”走搁。 例如:
刷新頁面后独柑,應(yīng)會(huì)看到以下頁面所示的內(nèi)容:
可以單擊“刪除”并從數(shù)據(jù)庫中刪除書籍記錄。
后續(xù)步驟
本教程已創(chuàng)建一個(gè)可在 Linux VM 上使用 MEAN 堆棧跟蹤書籍記錄的 Web 應(yīng)用程序朱盐。 你已了解如何:
創(chuàng)建 Linux VM
安裝 Node.js
安裝 MongoDB 并設(shè)置服務(wù)器
安裝 Express 并設(shè)置服務(wù)器的路由
使用 AngularJS 訪問路由
運(yùn)行應(yīng)用程序
轉(zhuǎn)到下一教程群嗤,了解如何使用 SSL 證書保護(hù) Web 服務(wù)器菠隆。
立即訪問http://market.azure.cn