本教程介绍如何在 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复制
安装 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 服务器。
使用 SSL 保护 Web 服务器
立即访问http://market.azure.cn