本教程介绍如何在 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复制
az group create --name myResourceGroupMEAN --location "China North" az vm create \  --resource-group myResourceGroupMEAN \  --name myVM \  --image UbuntuLTS \  --admin-username azureuser \  --admin-password 'Azure12345678!' \  --generate-ssh-keys az vm open-port --port 3300 --resource-group myResourceGroupMEAN --name myVM 

创建 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。

  1. 在 VM 上,使用通过 SSH 打开的 bash shell 设置 MongoDB 密钥。

    bash复制
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
    echo "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
    
  2. 使用密钥更新包管理器。

    bash复制
    sudo apt-get update
    
  3. 安装 MongoDB。

    bash复制
    sudo apt-get install -y mongodb
    
  4. 启动服务器。

    bash复制
    sudo service mongodb start
    
  5. 还需要安装 body-parser 包,以帮助我们处理在请求中传递给服务器的 JSON。

    安装 npm 包管理器。

    bash复制
    sudo apt-get install npm
    

    安装正文分析器包。

    bash复制
    sudo npm install body-parser
    
  6. 创建名为 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 来为数据库提供书籍架构。

  1. 安装 Express 和 Mongoose。

    bash复制
    sudo npm install express mongoose
    
  2. 在 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'));});
    };
    
  3. 在 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 相连接,并针对书籍数据库执行操作。

  1. 将目录切换回到 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);});};
    });
    
  2. 在 public 文件夹中,创建包含所定义的网页的、名为 index.html 的文件。

    html复制
    <!doctype html>
    <html ng-app="myApp" ng-controller="myCtrl"> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> <script src="script.js"></script> </head> <body> <div> <table> <tr> <td>Name:</td> <td><input type="text" ng-model="Name"></td> </tr> <tr> <td>Isbn:</td> <td><input type="text" ng-model="Isbn"></td> </tr> <tr> <td>Author:</td> <td><input type="text" ng-model="Author"></td> </tr> <tr> <td>Pages:</td> <td><input type="number" ng-model="Pages"></td> </tr> </table> <button ng-click="add_book()">Add</button> </div> <hr> <div> <table> <tr> <th>Name</th> <th>Isbn</th> <th>Author</th> <th>Pages</th> </tr> <tr ng-repeat="book in books"> <td><input type="button" value="Delete" data-ng-click="del_book(book)"></td> <td>{{book.name}}</td> <td>{{book.isbn}}</td> <td>{{book.author}}</td> <td>{{book.pages}}</td> </tr> </table> </div> </body> </html> 

运行应用程序

  1. 将目录切换回到 Books (cd ..),并通过运行以下命令启动服务器:

    bash复制
    nodejs server.js
    
  2. 打开 Web 浏览器并导航到针对 VM 记录的地址。 例如 http://13.72.77.9:3300。 应显示以下页面所示的内容:

  3. 在文本框中输入数据并单击“添加”。 例如:

  4. 刷新页面后,应会看到以下页面所示的内容:

  5. 可以单击“删除”并从数据库中删除书籍记录。

后续步骤

本教程已创建一个可在 Linux VM 上使用 MEAN 堆栈跟踪书籍记录的 Web 应用程序。 你已了解如何:

  • 创建 Linux VM
  • 安装 Node.js
  • 安装 MongoDB 并设置服务器
  • 安装 Express 并设置服务器的路由
  • 使用 AngularJS 访问路由
  • 运行应用程序

转到下一教程,了解如何使用 SSL 证书保护 Web 服务器。

立即访问http://market.azure.cn

使用 SSL 保护 Web 服务器

在 Azure 中的 Linux VM 上创建 MongoDB、Express、AngularJS 和 Node.js (MEAN) 堆栈相关推荐

  1. 如何使用 Jenkins、GitHub 和 Docker 在 Azure 中的 Linux VM 上创建开发基础结构

    若要将应用程序开发的生成和测试阶段自动化,可以使用持续集成和部署 (CI/CD) 管道. 本教程介绍如何在 Azure VM 上创建 CI/CD 管道,包括如何: 创建 Jenkins VM 安装并配 ...

  2. linux 内核配置raid,在 Linux VM 上配置软件 RAID - Azure Virtual Machines | Microsoft Docs

    在 Linux 上配置软件 RAID 02/02/2017 本文内容 一种比较常见的情况是,在 Azure 中的 Linux 虚拟机上使用软件 RAID 将多个附加的数据磁盘显示为单个 RAID 设备 ...

  3. star ccm 报java错误_在 Linux VM 上运行 STAR-CCM+ 与 HPC Pack - Azure Virtual Machines | Microsoft Docs...

    在 Azure 中的 Linux RDMA 群集上运行 STAR-CCM+ 和 Microsoft HPC Pack 09/13/2016 本文内容 重要 经典 VM 将于 2023 年 3 月 1 ...

  4. Linux移动光标指令hkjl,使用 HPC Pack 在 Linux VM 上執行 OpenFOAM - Azure Virtual Machines | Microsoft Docs...

    在 Azure 中的 Linux RDMA 叢集以 Microsoft HPC Pack 執行 OpenFoam 07/22/2016 本文內容 重要 傳統 Vm 將于2023年3月1日淘汰. 如果您 ...

  5. 如何在 Azure 中的 Linux 经典虚拟机上设置终结点

    在 Azure 中使用经典部署模型创建的所有 Linux 虚拟机都可以通过专用网络通道与同一云服务或虚拟网络中的其他虚拟机自动通信. 但是,Internet 或其他虚拟网络中的计算机需要终结点将入站网 ...

  6. linux mongo 服务器,如何用MongoDB在Linux服务器上创建大量连接和线程的记忆

    最近,我们想对MongoDB在大量连接中的行为进行基准测试.这使我不得不重新讨论该主题,并刷新关于如何在Linux服务器上创建大量连接和线程的记忆.在此过程中,我发现了一些没有使用过的新可调参数. M ...

  7. Linux服务器上创建新用户

    Linux服务器上创建账户用到useradd命名,一般常用以下命令: $sudo useradd -m -s /bin/bash userName // 在/home目录下新建userName目录 $ ...

  8. 在Ubuntu 14.04上设置生产环境可用的Node.js

    在Ubuntu 14.04上设置生产环境可用的Node.js 提供:ZStack社区 前言 Node.js是一个开源的JavaScript运行时环境,开发者可以用它方便的构建服务器端应用和网络应用.N ...

  9. Node.js (上)(超级详细的node.js学习笔记 !!!)

    目录 一.初识Node.js与内置模块 1.之前知识回顾(为Node.js理解做铺垫) 1.1浏览器中的js的组成部分 1.2 为什么js可以在浏览器中被执行 1.3 为什么浏览器可以操作Bom和Do ...

最新文章

  1. %@ INCLUDE FILE=%与JSP:INCLUDE PAGE=/区别
  2. (Unfinished)RNN-循环神经网络之LSTM和GRU-04介绍及推导
  3. python27文件夹_为什么python27.dll不是python安装文件夹的一部分,而是在Windows系统文件夹中...
  4. asp.net 导出word excel 当前上下文中不存在名称“Encoding”报错问题
  5. 1.3tf的varible\labelencoder
  6. php指定字符编码,PHP字符编码问题
  7. 高效向前“零延迟” 数据中心IT自动化势在必行
  8. Kindle一些使用
  9. 安卓项目R,java文件不能自动更新,clean之后,R.java消失 (转自 Cynosure鱼)
  10. 学会jQuery 不用买书
  11. “闽南金三角”——世丰管道福建漳州高级水电工程师会议
  12. Linux服务器CPU飙升排查
  13. Excel·VBA单元格区域行列数转换函数
  14. 利用python进行显著性分析
  15. python enumerate用法
  16. Acwing:我在哪(二分+字符串哈希 Python)
  17. 少儿编程Scratch学习教程5--基本操作(二)动画例子
  18. 向量、矩阵、实数、复数之间的各种运算方法
  19. 【r-GAN】论文翻译 - Learning Representations and Generative Models for 3D Point Clouds
  20. 着色模型简介和实现(上)

热门文章

  1. SpringBoot+flowable快速实现工作流,so easy!
  2. 干掉Random:这个类已经成为获取随机数的王者
  3. G1调优很难?记住这些经验技巧~
  4. MyBatis-Plus为啥这么牛?
  5. SpringBoot 三招组合拳,手把手教你打出优雅的后端接口
  6. Spring AOP是什么?你都拿它做什么?
  7. 智源计算所-互联网虚假新闻检测挑战赛(冠军)方案,开源分享
  8. 被放养导致申博论文难产,该不该硬gang导师?
  9. 中国程序员开发的远程桌面火了!Mac 可用,只有 9MB,支持自建中继器
  10. 500行代码写一个俄罗斯方块游戏