欢迎技术爱好者和网络开发人员,即“成为网络开发人员”系列的另一部分。本文将探讨一个令人兴奋的旅程,探索Mongodb Cloud Atlas,Node.js和Mongoose的世界。
如果您是新手,请从本系列here的第1部分开始。
- Introduction
- Setting Up the Environment
- Building a CMS System: An Example
- Mongoose and Schema Design
- Implementing the CMS System
- Deploying the Application
- Troubleshooting and Common Issues
- Scale this Web App:
- Conclusion
简介
在本文中,我们将深入研究部署Web应用程序的实际方面,特别关注MongoDB Cloud Atlas,这是一个由构建MongoDB的人开发的强大,完全管理的云数据库。 MongoDB Cloud Atlas痛苦于数据库管理,使您腾出专注于最重要的应用程序。
为了补充mongodb和node.js,我们还将深入研究。 Mongoose是Node.js的优雅MongoDB对象建模。它提供了一个简单的基于模式的解决方案,可以对您的应用程序数据进行建模,并配有内置类型铸造,验证,查询构建和业务逻辑挂钩。
在本指南中,我们将建立一个简单的内容管理系统(CMS),以帮助您了解这些技术的实际应用。我们将逐步介绍该过程,提供有据可查的代码示例,这些示例通常在行业中使用,并在您到达文档阶段时为您提供帮助。我们还将分享用于构建数据库和设计模式的最佳实践,并帮助您解决部署过程中可能出现的常见问题。
所以,搭扣,准备潜入蒙古德·云地图集,node.js和mongoose的激动人心的世界。在本指南的结尾,您将对这些技术有深入的了解,并能够很好地部署自己的Web应用程序。让我们开始!
设置环境
在我们深入研究应用程序开发深度之前,我们需要确保正确建立环境。这涉及安装必要的软件和工具,设置MongoDB Cloud Atlas以及准备我们的Node.js环境。不用担心这听起来很压倒性;我们将指导您完成过程的每个步骤。
安装必要的软件和工具
首先,我们需要安装node.js和npm(node package manager)。 Node.js是我们将用于运行服务器端JavaScript代码的运行时环境,NPM是NODE.JS的软件包管理器,它将帮助我们安装我们需要的其他工具和库。
要安装node.js和npm,请前往official Node.js website,然后下载用于操作系统的安装程序。运行安装程序并遵循提示。要验证安装成功,请打开终端或命令提示符并运行以下命令:
node -v
npm -v
这些命令应显示您安装的node.js和npm的版本。
设置MongodB Cloud Atlas
接下来,我们将设置MongoDB Cloud Atlas。 MongoDB Cloud Atlas是一款完整管理的云数据库服务,可自动化耗时的管理任务,例如硬件配置,数据库设置,修补和备份,使您可以专注于应用程序。
> >要开始使用MongoDB Cloud Atlas,请按照以下步骤:
- 转到MongoDB Cloud Atlas website并注册一个免费帐户。
- 登录后,通过单击“新项目”来创建一个新项目。给您的项目一个名字,然后单击“下一步”。
- 现在,通过单击“构建群集”来创建一个新的群集。对于本指南,您可以使用可用的免费层。
- 为您的集群选择一个云提供商和区域。为了本指南,任何提供商和地区都会做。
- 单击“创建群集”。您的群集准备就绪可能需要几分钟。
准备好群集后,您需要设置数据库用户并允许网络访问。为此:
- 单击左侧菜单中“安全性”部分下的“数据库访问”。
- 单击“添加新数据库用户”。选择一个用户名和密码,并让此用户“读写到任何数据库”特权。
- 单击“添加用户”。
- 现在,转到“安全”部分下的“网络访问”。
- 单击“添加IP地址”。对于本指南,您可以通过输入“ 0.0.0.0/0”来允许从任何地方访问,但是在真实的情况下,您需要将其限制为需要访问数据库的IP地址。
- 单击“确认”。
最后,您需要在应用程序中获取连接字符串:
- 通过单击左侧菜单中的“群集”,转到群集的概述。
- 单击“连接”。
- 选择“连接您的应用程序”。
- 复制连接字符串,但请记住将
<password>
替换为您创建的数据库用户的密码。
设置Node.js环境
安装了node.js并设置了mongodb云地图集,我们准备创建node.js环境。首先,我们将为我们的项目创建一个新目录。打开终端或命令提示符,导航到您想要的项目的位置,然后运行:
mkdir my-cms
cd my-cms
接下来,我们将在此目录中初始化一个新的node.js项目:
npm init -y
此命令在您的目录中创建一个带有默认值的新package.json
文件。
最后,我们将安装Express,这是一个流行的Node.js和Mongoose的流行Web应用程序框架,我们将用于与MongoDB数据库进行交互:
npm install express mongoose
就是这样!现在,您可以使用一个Node.js环境进行开发,MongoDB Cloud Atlas设置以及已安装的所有必要工具。在下一节中,我们将开始构建我们的CMS系统并深入研究Mongoose和模式设计。让我们进行编码!
在现在我们已经建立了环境,现在该是时候卷起袖子并开始编码了。在本节中,我们将建立一个内容管理系统(CMS),以演示MongoDB Cloud Atlas,Node.js和Mongoose的实际应用。 CMS是一种软件,允许用户在网站上创建,管理和修改内容而无需专门的技术知识。
CMS System的概述
我们的CMS将是一个简单而功能的系统,允许用户创建,读取,更新和删除(CRUD)文章。每篇文章都有标题,内容和作者。用户将能够查看所有文章,查看一篇文章,创建新文章,更新现有文章并删除文章。
此CMS将作为一个实践示例,以了解如何构建Node.js应用程序,如何使用Mongoose设计数据库架构以及如何使用MongodB Cloud Atlas进行CRUD操作。
设计应用程序结构
构建node.js应用程序时,重要的是以保持其组织和可扩展的方式构建您的项目。这是我们将构建CMS的方式:
/my-cms
/node_modules
/models
- Article.js
/routes
- articles.js
- package.json
- server.js
这是每个文件和目录所做的:
-
node_modules
:此目录由NPM创建,并保留我们已安装的所有软件包。 -
models/Article.js
:这是我们为文章定义的词汇模型。 -
routes/articles.js
:这是我们定义处理文章的CRUD操作的快速路线的地方。 -
package.json
:此文件是由npm init
创建的,并持有有关我们项目的元数据以及我们项目依赖的包装列表。 -
server.js
:这是我们应用程序的入口点。在这里我们将设置Express和Mongoose,然后启动我们的服务器。
在下一节中,我们将开始实施我们的CMS系统。我们将首先定义models/Article.js
中的Mongoose架构和模型,然后我们将继续在routes/articles.js
中实现快速路线。最后,我们将在server.js
中设置服务器。
记住,学习的关键是实践。不要犹豫尝试并尝试不同的事情。如果您遇到任何问题或有任何疑问,请不要担心。我们将介绍常见问题,并在本指南稍后进行故障排除。现在,让我们开始构建我们的CMS!
在当我们踏上构建CMS系统的旅程时,我们需要了解的关键方面之一是模式设计。在MongoDB中,架构是数据的组织,作为数据库的构建方式的蓝图。虽然MongoDB尚未模式,但SQL数据库需要预定义的架构。 Mongoose将模式的力量带到了MongoDB,使数据建模更加容易。
在Mongoose是MongoDB和Node.js的对象数据建模(ODM)库。它提供了一个简单的基于模式的解决方案,可以对您的应用程序数据进行建模,并包括内置类型铸造,验证,查询构建和业务逻辑挂钩。
本质上,Mongoose在MongoDB的驱动程序上提供了一层功能,以使其更容易,更直观地使用我们的数据。它允许我们使用映射到MongoDB文档的强大模式定义对象。
为CMS系统设计模式
现在,让我们为我们的CMS系统设计架构。如前所述,我们的CMS中的每篇文章都将具有标题,内容和作者。这是我们可以使用猫鼬来定义此模式的方法:
const mongoose = require('mongoose');
const ArticleSchema = new mongoose.Schema({
title: {
type: String,
required: true,
trim: true,
maxlength: 100
},
content: {
type: String,
required: true
},
author: {
type: String,
required: true,
trim: true,
maxlength: 50
}
});
module.exports = mongoose.model('Article', ArticleSchema);
在此代码中,我们首先导入杂种,然后使用new mongoose.Schema()
定义一个新的模式。对于我们的模式中的每个字段,我们定义数据的类型和任何选项。在这种情况下,我们已根据需要标记所有字段,并且正在修剪标题和作者字段,以删除任何领先或尾随的空格。我们还为标题和作者字段设置了最大长度。让我们实现刚刚实施的文章模式的文档示例。
我们的CMS系统围绕Article
模型旋转。该模型代表我们的CMS中的一篇文章,它用于与MongoDB数据库中的articles
集合进行交互。
这是每个字段所代表的:
-
title
:文章的标题。这是一个需要的字符串,修剪为删除领先和尾随的空格,最大长度为100个字符。 -
content
:文章的内容。这是一个必需的字符串。 -
author
:文章的作者。这是一个需要的字符串,修剪了以删除领先和尾随的空格,最大长度为50个字符。
最后,我们使用mongoose.model()
从模式创建模型并导出它。该模型是我们在路线中使用的与MongoDB数据库中文章进行交互的方式。
用于构建数据库和设计方案的最佳实践
在构建数据库和设计模式时,您应该牢记一些最佳实践:
- 保持模式简单:尝试使模式尽可能简单和直观。这使您的数据更易于使用。
- 使用正确的数据类型:Mongoose支持许多数据类型,包括字符串,数字,日期,缓冲区,布尔值,混合,objectid,阵列,阵列,小数,地图和集合。使用正确的数据类型可以帮助您确保数据完整性,并可以使您的数据更易于使用。
- 验证您的数据:猫鼬允许您为您的字段定义验证规则。这可以帮助您确保数据库中存储的数据有效且一致。
- 使用索引进行更快的查询:如果您有经常查询的字段,请考虑在这些字段中添加索引。索引可以使您的查询更快。
- 避免使用大型嵌入式数组或文档:虽然MongoDB允许您嵌入文档中的数组或文档,但大型嵌入式阵列或文档可能会导致性能问题。如果您发现自己需要大型嵌入式阵列或文档,请考虑将您的数据拆分为单独的集合。
请记住,这些只是指南,数据库的最佳结构或模式取决于您的特定用例。在下一部分中,我们将开始使用刚刚设计的模式来实现我们的CMS系统。让我们进行编码!
实现CMS System
在设置环境并设计了架构时,是时候开始实施我们的CMS系统了。在本节中,我们将逐步指导您完成该过程,将MongodB Cloud Atlas和Mongoose纳入我们的应用程序。
构建CMS系统的逐步指南
设置服务器
首先,让我们设置服务器。在您的server.js
文件中,添加以下代码:
const express = require('express');
const mongoose = require('mongoose');
const articles = require('./routes/articles');
const app = express();
app.use(express.json());
app.use('/articles', articles);
const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Server running on port ${port}`));
在此代码中,我们首先导入Express,Mongoose和我们的文章路线。然后,我们创建一个Express应用程序,然后使用express.json()
中间件来解析JSON有效载荷的传入请求。我们还设置了与/articles
路径一起使用的文章路线。
最后,我们在PORT
环境变量中指定的端口上启动服务器,如果未设置PORT
,则启动5000。
连接到mongodb cloud atlas
接下来,我们需要连接到MongoDB Cloud Atlas数据库。在启动服务器的行之前,将以下代码添加到server.js
文件:
mongoose
.connect('your-connection-string', {
useNewUrlParser: true,
useUnifiedTopology: true,
})
.then(() => console.log('Connected to MongoDB Cloud Atlas'))
.catch((err) => console.error('Could not connect to MongoDB Cloud Atlas', err));
用您从MongoDB Cloud Atlas获得的连接字符串替换'your-connection-string'
。此代码使用Mongoose连接到MongoDB Cloud Atlas数据库。如果连接成功,它将记录成功消息。如果连接失败,它将记录错误消息。
实现路由
现在,让我们实现我们的路线。在您的routes/articles.js
文件中,添加以下代码:
const express = require('express');
const Article = require('../models/Article');
const router = express.Router();
// Get all articles
router.get('/', async (req, res) => {
const articles = await Article.find();
res.send(articles);
});
// Get one article
router.get('/:id', async (req, res) => {
const article = await Article.findById(req.params.id);
if (!article) return res.status(404).send('Article not found');
res.send(article);
});
// Create a new article
router.post('/', async (req, res) => {
let article = new Article({
title: req.body.title,
content: req.body.content,
author: req.body.author,
});
article = await article.save();
res.send(article);
});
// Update an existing article
router.put('/:id', async (req, res) => {
const article = await Article.findByIdAndUpdate(
req.params.id,
{
title: req.body.title,
content: req.body.content,
author: req.body.author,
},
{ new: true }
);
if (!article) return res.status(404).send('Article not found');
res.send(article);
});
// Delete an article
router.delete('/:id', async (req, res) => {
const article = await Article.findByIdAndRemove(req.params.id);
if (!article) return res.status(404).send('Article not found');
res.send(article);
});
module.exports = router;
在此代码中,我们首先导入Express,我们的文章模型,并创建一个新路由器。然后,我们为每个CRUD操作定义路线。每个路由处理程序都是一个异步函数,它使用Mongoose与我们的MongoDB数据库进行交互。如果操作成功,我们将结果发送回客户端。如果操作失败,我们将错误消息发送回客户端。
就是这样!您现在拥有一个功能齐全的CMS系统。您可以使用Postman或类似工具来测试您的路线。在下一部分中,我们将使用MongoDB Cloud Atlas准备我们的部署应用程序并部署它。让我们继续前进!
部署应用程序
在构建我们的CMS系统的所有艰苦工作之后,是时候采取最有意义的部分了 - 部署我们的应用程序了。部署是使我们的应用程序可用于用户的过程。在本节中,我们将指导您使用MongoDB Cloud Atlas准备部署并部署它的应用程序。
准备部署申请
在我们部署应用程序之前,我们需要做一些为生产环境准备的事情:
1。 环境变量:在我们的应用程序中,我们使用了连接字符串连接到MongoDB Cloud Atlas数据库。此连接字符串包含敏感信息,例如我们的数据库用户名和密码。为了保护这些信息,我们应该将其存储在环境变量中,而不是将其存储在我们的应用程序中。我们可以使用dotenv
软件包从.env
文件加载环境变量:
npm install dotenv
然后,在项目的根部创建一个.env
文件,并添加环境变量:
DB_CONNECTION_STRING=your-connection-string
现在,您可以将环境变量加载到server.js
文件中:
require('dotenv').config();
mongoose.connect(process.env.DB_CONNECTION_STRING, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
记住将您的.env
文件添加到.gitignore
文件中,以防止将其投入到git存储库中。
2。 处理错误:在生产环境中,我们希望优雅地处理错误并防止它们崩溃我们的应用程序。我们可以在Express中使用中间件来捕获和处理错误。这可能很简单,就像记录错误并使用500 Internal Server Error
状态代码发送响应一样简单。
3。 性能优化:在生产环境中,性能至关重要。我们已经讨论了一些性能优化策略,例如增加分页和缓存。另一种策略是压缩我们的HTTP响应以减少其尺寸。我们可以使用compression
中间件来执行此操作:
npm install compression
然后,在您的server.js
文件中使用它:
const compression = require('compression');
app.use(compression());
部署应用程序
我们准备部署的应用程序了,该部署它了。部署node.js应用程序有很多方法,但是对于本指南,我们将使用支持Node.js应用程序的流行云平台。
1。 创建一个Heroku帐户:如果您还没有Heroku帐户,请转到Heroku website并注册一个免费帐户。
2。 安装Heroku Cli :Heroku CLI是一种工具,可让您从命令行创建和管理Heroku应用程序。遵循official instructions安装Heroku Cli。
3。 创建一个新的Heroku应用:在您的终端中,导航到您的项目目录并运行以下命令以创建一个新的Heroku应用程序:
heroku create
4。 将代码推向Heroku :Heroku使用Git部署您的应用程序,因此您需要进行任何更改:
git add .
git commit -m "Prepare for deployment"
然后,将您的代码推到Heroku:
git push heroku master
5。 S et您的环境变量:还记得我们之前设置的那些环境变量吗?我们也需要将它们设置在Heroku。您可以在Heroku仪表板上进行此操作,也可以使用Heroku CLI:
heroku config:set DB_CONNECTION_STRING=your-connection-string
6。 打开您的应用:如果一切顺利,现在应该部署您的应用程序。您可以使用以下命令在网络浏览器中打开它:
heroku open
您的CMS系统现在可以生存和访问世界。恭喜您部署了您的应用程序!在下一部分中,我们将讨论您可能遇到的一些常见问题以及如何对它们进行故障排除。
故障排除和常见问题
虽然构建和部署应用程序可能是一个有意义的过程,但并非没有挑战。您很可能会沿途遇到问题,尤其是在处理MongoDB Cloud Atlas和Mongoose等复杂系统时。在本节中,我们将讨论您可能会面临的一些常见问题,并提供有关如何解决这些问题的提示。
常见问题
问题1:应用程序在启动上崩溃
这是一个常见的问题,可以带来许多原因。这可能是由于代码中的错误,丢失的环境变量或依赖关系问题。
故障排除:检查应用程序的日志。在Heroku上,您可以通过在终端中运行heroku logs --tail
来做到这一点。日志应该为您提供有关引起问题的原因的线索。如果这是代码中的错误,则可能需要调试代码。如果是丢失的环境变量,请确保您正确设置了所有环境变量。如果您的依赖关系是问题,请尝试删除您的node_modules
目录和package-lock.json
文件并再次运行npm install
。
问题2:申请在本地起作用,但在Heroku
上不起作用有时,您的应用程序可以在本地机器上完美工作,但部署到Heroku时会失败。
故障排除:这可能是由于您当地环境与Heroku环境之间的差异所致。检查您的环境变量,并确保它们在Heroku上正确设置。另外,请确保您在正确的端口上听。在Heroku上,您应该在process.env.PORT
上听。
问题1:连接问题
使用MongoDB Cloud Atlas和Mongoose时最常见的问题之一是连接问题。您可能会看到诸如“ Mongonetworkerror”或“ MongooseServerselectionError”之类的错误。
故障排除:首先,检查连接字符串并确保其正确。切记用您的实际密码替换<password>
。另外,请确保您的IP地址在MongoDB Cloud Atlas中列入白色。如果您仍然遇到问题,请尝试使用MongoDB Compass(例如MongoDB Compass)连接到数据库,以查看问题是否与您的应用程序或数据库有关。
问题2:验证错误
Mongoose提供了强大的验证功能,但有时这些功能会引起问题。例如,在尝试保存文档时,您可能会看到一个“验证”。
故障排除:检查错误消息以查看哪个验证规则失败。然后,检查您的模式和数据以确保它们匹配。请记住,Mongoose验证规则对病例敏感且对空间敏感。
记住,故障排除是一种随着实践而提高的技能。您使用这些技术的越多,诊断和解决问题就会越好。如果您遇到问题,不要灰心 - 它们只是学习和改进的机会。
缩放此Web应用程序:
在更大范围内构建此应用程序时,您可能需要考虑的这些阶段:
- 测试:彻底测试您的应用程序以确保其正常工作。您可以使用Postman之类的工具来手动测试您的路线,也可以使用Jest或Mocha等库编写自动测试。
- 错误处理:虽然我们在路由处理程序中添加了一些基本错误处理,但您可能需要在应用程序中添加更强大的错误处理。这可能包括处理数据库错误,验证错误和意外错误。
- 安全性:在部署应用程序之前,您应该考虑添加一些安全措施。这可能包括限制限制以防止滥用的费率,限制哪些域可以访问您的API以及数据消毒以防止NOSQL注入攻击。
- 性能优化:您可以通过多种方法来优化应用程序的性能。例如,您可以在“获取所有文章”路线上添加分页,以一次限制返回的文章数量。您也可以添加缓存以提高某些路线的性能。
- 文档:如果其他开发人员将使用您的API,则最好提供解释如何使用它的文档。这可能包括路线列表,他们期望的数据以及它们返回的数据。
- 部署:一旦您的应用程序进行了测试,安全和优化,就可以将其部署。在下一节中,我们将讨论如何准备您的部署应用程序以及如何使用MongoDB Cloud Atlas部署。
结论
,我们有!从设置环境到部署我们的CMS系统,我们已经浏览了部署Web应用程序和使用MongoDB Cloud Atlas的过程。我们还深入研究了猫鼬和模式设计,学习如何为CMS系统构建数据库和设计模式。
我们首先介绍了MongoDB Cloud Atlas,Node.js和Mongoose,为我们的实用指南奠定了基础。然后,我们继续设置环境,安装必要的软件和工具,并设置MongoDB Cloud Atlas和我们的Node.js环境。
接下来,我们构建了一个CMS系统,以提供系统的概述并设计应用程序结构。然后,我们深入研究了杂种和模式设计,了解猫鼬,为我们的CMS系统设计模式,并讨论用于构建数据库和设计模式的最佳实践。
之后,我们实施了CMS系统,为建立系统并结合了MongoDB Cloud Atlas和Mongoose提供了分步指南。然后,我们准备了我们的部署申请,并使用MongoDB Cloud Atlas进行了部署。
最后,我们讨论了故障排除和常见问题,涵盖部署期间的常见问题,同时使用MongoDB云图集和猫鼬,以及如何对这些问题进行故障排除。我们还为我们的CMS系统提供了文档,并解释了如何使用我们的Article
型号。
作为最后的注意,请记住学习是一个连续的过程。有许多资源可加深您对这些主题的理解。 official MongoDB documentation,Mongoose documentation和Node.js documentation是一个好地方。
感谢您加入我们的旅程。愉快的编码!