title | description | author | ms.author | ms.service | ms.subservice | ms.devlang | ms.topic | ms.date |
---|---|---|---|---|---|---|---|---|
Connect a Node.js MongoDB app to Azure Cosmos DB |
This quickstart demonstrates how to connect an existing MongoDB app written in Node.js to Azure Cosmos DB. |
rimman |
rimman |
cosmos-db |
cosmosdb-mongo |
nodejs |
quickstart |
12/06/2018 |
[!div class="op_single_selector"]
Azure Cosmos DB is Microsoft’s globally distributed multi-model database service. You can quickly create and query document, key/value, and graph databases, all of which benefit from the global distribution and horizontal scale capabilities at the core of Cosmos DB.
This quickstart demonstrates how to use an existing MongoDB app written in Node.js and connect it to your Cosmos database, which supports MongoDB client. In other words, it is transparent to the application that the data is stored in a Cosmos database.
When you are done, you will have a MEAN application (MongoDB, Express, Angular, and Node.js) running on Cosmos DB.
[!INCLUDE cloud-shell-try-it]
If you choose to install and use the CLI locally, this topic requires that you are running the Azure CLI version 2.0 or later. Run az --version
to find the version. If you need to install or upgrade, see Install Azure CLI.
If you don't have an Azure subscription, create a free account before you begin. [!INCLUDE cosmos-db-emulator-mongodb]
In addition to Azure CLI, you need Node.js and Git installed locally to run npm
and git
commands.
You should have working knowledge of Node.js. This quickstart is not intended to help you with developing Node.js applications in general.
Run the following commands to clone the sample repository. This sample repository contains the default MEAN.js application.
-
Open a command prompt, create a new folder named git-samples, then close the command prompt.
md "C:\git-samples"
-
Open a git terminal window, such as git bash, and use the
cd
command to change to the new folder to install the sample app.cd "C:\git-samples"
-
Run the following command to clone the sample repository. This command creates a copy of the sample app on your computer.
git clone https://github.com/prashanthmadi/mean
Install the required packages and start the application.
cd mean
npm install
npm start
The application will try to connect to a MongoDB source and fail, go ahead and exit the application when the output returns "[MongoError: connect ECONNREFUSED 127.0.0.1:27017]".
If you are using an installed Azure CLI, log in to your Azure subscription with the az login command and follow the on-screen directions. You can skip this step if you're using the Azure Cloud Shell.
az login
If you are using an installed Azure CLI, check to see if the cosmosdb
component is already installed by running the az
command. If cosmosdb
is in the list of base commands, proceed to the next command. You can skip this step if you're using the Azure Cloud Shell.
If cosmosdb
is not in the list of base commands, reinstall Azure CLI.
Create a resource group with the az group create. An Azure resource group is a logical container into which Azure resources like web apps, databases and storage accounts are deployed and managed.
The following example creates a resource group in the West Europe region. Choose a unique name for the resource group.
If you are using Azure Cloud Shell, click Try It, follow the onscreen prompts to login, then copy the command into the command prompt.
az group create --name myResourceGroup --location "West Europe"
Create a Cosmos account with the az cosmosdb create command.
In the following command, please substitute your own unique Cosmos account name where you see the <cosmosdb-name>
placeholder. This unique name will be used as part of your Cosmos DB endpoint (https://<cosmosdb-name>.documents.azure.com/
), so the name needs to be unique across all Cosmos accounts in Azure.
az cosmosdb create --name <cosmosdb-name> --resource-group myResourceGroup --kind MongoDB
The --kind MongoDB
parameter enables MongoDB client connections.
When the Azure Cosmos DB account is created, the Azure CLI shows information similar to the following example.
Note
This example uses JSON as the Azure CLI output format, which is the default. To use another output format, see Output formats for Azure CLI commands.
{
"databaseAccountOfferType": "Standard",
"documentEndpoint": "https://<cosmosdb-name>.documents.azure.com:443/",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Document
DB/databaseAccounts/<cosmosdb-name>",
"kind": "MongoDB",
"location": "West Europe",
"name": "<cosmosdb-name>",
"readLocations": [
{
"documentEndpoint": "https://<cosmosdb-name>-westeurope.documents.azure.com:443/",
"failoverPriority": 0,
"id": "<cosmosdb-name>-westeurope",
"locationName": "West Europe",
"provisioningState": "Succeeded"
}
],
"resourceGroup": "myResourceGroup",
"type": "Microsoft.DocumentDB/databaseAccounts",
"writeLocations": [
{
"documentEndpoint": "https://<cosmosdb-name>-westeurope.documents.azure.com:443/",
"failoverPriority": 0,
"id": "<cosmosdb-name>-westeurope",
"locationName": "West Europe",
"provisioningState": "Succeeded"
}
]
}
In this step, you connect your MEAN.js sample application to Cosmos database you just created.
In your MEAN.js repository, open config/env/local-development.js
.
Replace the content of this file with the following code. Be sure to also replace the two <cosmosdb-name>
placeholders with your Cosmos account name.
'use strict';
module.exports = {
db: {
uri: 'mongodb://<cosmosdb-name>:<primary_master_key>@<cosmosdb-name>.documents.azure.com:10255/mean-dev?ssl=true&sslverifycertificate=false'
}
};
In order to connect to a Cosmos database, you need the database key. Use the az cosmosdb list-keys command to retrieve the primary key.
az cosmosdb list-keys --name <cosmosdb-name> --resource-group myResourceGroup --query "primaryMasterKey"
The Azure CLI outputs information similar to the following example.
"RUayjYjixJDWG5xTqIiXjC..."
Copy the value of primaryMasterKey
. Paste this over the <primary_master_key>
in local-development.js
.
Save your changes.
Run npm start
again.
npm start
A console message should now tell you that the development environment is up and running.
Navigate to http://localhost:3000
in a browser. Click Sign Up in the top menu and try to create two dummy users.
The MEAN.js sample application stores user data in the database. If you are successful and MEAN.js automatically signs into the created user, then your Azure Cosmos DB connection is working.
Data stored in a Cosmos database is available to view and query in the Azure portal.
To view, query, and work with the user data created in the previous step, login to the Azure portal in your web browser.
In the top Search box, type Azure Cosmos DB. When your Cosmos account blade opens, select your Cosmos account. In the left navigation, click Data Explorer. Expand your collection in the Collections pane, and then you can view the documents in the collection, query the data, and even create and run stored procedures, triggers, and UDFs.
In this step, you deploy your Node.js application to Cosmos DB.
You may have noticed that the configuration file that you changed earlier is for the development environment (/config/env/local-development.js
). When you deploy your application to App Service, it will run in the production environment by default. So now, you need to make the same change to the respective configuration file.
In your MEAN.js repository, open config/env/production.js
.
In the db
object, replace the value of uri
as show in the following example. Be sure to replace the placeholders as before.
'mongodb://<cosmosdb-name>:<primary_master_key>@<cosmosdb-name>.documents.azure.com:10255/mean?ssl=true&sslverifycertificate=false',
Note
The ssl=true
option is important because Cosmos DB requires SSL.
In the terminal, commit all your changes into Git. You can copy both commands to run them together.
git add .
git commit -m "configured MongoDB connection string"
[!INCLUDE cosmosdb-delete-resource-group]
In this quickstart, you've learned how to create a Cosmos account, create a collection and run a console app. You can now import additional data to your Cosmos database.
[!div class="nextstepaction"] Import MongoDB data into Azure Cosmos DB