An Interest In:
Web News this Week
- April 24, 2024
- April 23, 2024
- April 22, 2024
- April 21, 2024
- April 20, 2024
- April 19, 2024
- April 18, 2024
Going serverless with MongoDB Realm - Vue.js Version
Serverless architecture is a pattern of running and building applications and services without having to manage infrastructure. It involves the applications and services running on the server, but all the server management is done by a cloud provider.
This post will discuss building a fullstack user management application using MongoDB, MongoDB Realm, and Vue.js. At the end of this tutorial, we will learn how to create a database on MongoDB, serverless functions as our endpoints using MongoDB Realm and consume the endpoints in a Vue.js application.
MongoDB Realm is a development platform designed for building mobile, web, desktop, and IoT applications. It offers services like data synchronization, serverless functions, triggers, user authentication, e.t.c. We can build and maintain application on MongoDB Realm using any of the following:
- Realm UI: a browser-based option to create and maintain application
- Realm CLI: a CLI-based option to define and deploy applications
- GitHub Deploy: use configuration files on Github to deploy applications from a Github repository
- Admin API: an HTTP-based request to manage your applications.
In this post, we will be using Realm UI to build our applications.
You can code along by cloning this repository (main branch) here. If you prefer to view the complete code, checkout to the dev branch of this same repository.
In this tutorial, we will focus on implementations only. The project UI has already been set up with TailwindCSS.
You can check out the React.js version here.
Prerequisites
The following steps in this post require JavaScript and Vue.js experience. Experience with TypeScript isnt a requirement, but its nice to have.
We also need a MongoDB account to host the database and create serverless functions. Signup is completely free.
Lets code
Running the Project
To get started, we need to navigate to the project location, open our terminal and install project dependency as shown below:
npm install
With that done, we can start a development server using the command below:
npm run serve
Setting up MongoDB
To get started, we need to log in or sign up into our MongoDB account and follow the option that applies to us:
For a New Account (Sign Up)
First, we need to answer a few questions to help MongoDB help set up our account. Then click on Finish.
Select Shared as the type of database.
Click on Create to setup a cluster. This might take sometime to setup.
Next, we need to create a user to access the database externally by inputting the Username, Password and then click on Create User. We also need to add our IP address to safely connect to the database by clicking on the Add My Current IP Address button. Then click on Finish and Close to save changes.
On saving the changes, we should see a Database Deployments screen, as shown below:
For an Existing Account (Log In)
Click the project dropdown menu and click on the New Project button.
Enter the realmVue
as the project name, click on Next and then click Create Project
Click on Build a Database
Select Shared as the type of database.
Click on Create to setup a cluster. This might take sometime to setup.
Next, we need to create a user to access the database externally by inputting the Username, Password and then clicking on Create User. We also need to add our IP address to safely connect to the database by clicking on the Add My Current IP Address button. Then click on Finish and Close to save changes.
On saving the changes, we should see a Database Deployments screen, as shown below:
Loading Sample Data
Next, we need to populate our database with users' sample data. To do this, click on the Browse Collections button
Click on Add My Own Data, input vueRealmDB
and vueRealmCol
as the database and collection name, and click on Create.
Next, we need to insert these sample data:
To do this, click on the Insert Document button, fill in the details above and click on Insert to save.
Creating and configuring MongoDB Realm application
With our database populated, we need to create serverless functions to perform Create, Read, Update and Delete (CRUD) on our database. To do this, select the Realm tab, click on Build your own App. Then click on Create Realm Application to setup our application.
MongoDB Realm also ships with templates that we can use to build our application quickly. For this tutorial, we will be building from scratch.
Next, we need to setup permission and rules for our functions. To do this, close the popup guide, click on Rules, select the vueRealmCol and click on Configure Collection.
MongoDB Realms Save and Deploy
With that done, MongoDB Realm will show us a widget illustrating the concept of Save and Deploy.
When writing a serverless function, clicking on Save creates a development draft that we can test and play around with. At the same time, Deploy makes our changes public to be consumed by another application(Vue.js in our case).
Click on Next and then Got it to continue.
Next, we need to allow Read and Write permissions for our function and then Save.
Next, navigate to the Authentication tab, click on Allow users to log in anonymously, toggle it on and Save Draft.
MongoDB Realm also ships with several authentication options that we can explore. For this tutorial, we will be using the anonymous option.
Creating serverless functions on MongoDB Realm
Get All Users Serverless Function
With the configuration done, we can now create a serverless function that returns list of users. To do this, navigate to the Functions tab, click on Create New Function, and input getAllUsers
as the function name
Next, select the Function Editor tab and modify the function to the following:
The snippet above does the following:
- Create a collection variable to access the
vueRealmDB
database andvueRealmCol
collection - Return the list of documents in the collection.
Next, we can test our function by clicking on Run button to see list of users.
Finally, we need to copy any returned users _id
and save it somewhere; we need it for the next function. Then click on Save Draft to create a deployment draft for our function.
Get A User Serverless Function
To do this, click on the Functions tab, click on Create New Function, and input getSingleUser
as the function name
Next, select the Function Editor tab, and modify the function to the following:
The snippet above does the following:
- Create a collection variable to access the
vueRealmDB
database andvueRealmCol
collection - Return a single user by finding it by its
_id
. Because MongoDB saves documents in BSON, we need to parse thearg
as BSON using theBSON.ObjectId
.
To test our function, Navigate to the Console tab, replace the Hello world!
in the exports function with the users _id
we copied earlier and then click on Run.
Finally, we need to save our function by clicking on the Save Draft button.
Edit A User Serverless Function
To do this, we need to follow the same steps as above.
First, click on the Functions tab, click on Create New Function, and input editUser
as the function name.
Next, select the Function Editor tab and modify the function to the following:
The snippet above does the following:
- Modify the function to accept
id
,name
,location
, andtitle
arguments - Create a collection variable to access the
vueRealmDB
database andvueRealmCol
collection - Create an
updated
variable that finds the document by_id
, update the collection fields, and set areturnNewDocument
flag to return the updated document.
Next, we can test our function by navigating to the Console tab, replace the Hello world!
in the exports function with required arguments(_id, name, location, and title), click on Run, and then Save Draft.
Create A User Serverless Function
To do this, we need to follow the same steps as before.
First, click on the Functions tab, click on Create New Function, and input createUser
as the function name.
Next, select the Function Editor tab and modify the function to the following:
The snippet above does the following:
- Modify the function to accept
name
,location
, andtitle
arguments. - Create a collection variable to access the
vueRealmDB
database andvueRealmCol
collection. - Create a new user by inserting the arguments and returning the user.
Next, we can test our function by navigating to the Console tab, replace the Hello world!
in the exports function with required arguments(name, location, and title), click on Run, and then Save Draft.
Delete A User Serverless Function
To do this, we need to follow the same steps as before.
First, click on the Functions tab, click on Create New Function, and input deleteUser
as the function name.
Next, select the Function Editor tab and modify the function to the following:
The snippet above does the following:
- Modify the function to accept arguments.
- Create a collection variable to access the
vueRealmDB
database andvueRealmCol
collection. - Create a
deleteUser
variable for deleting by_id
.
Next, we can test our function by navigating to the Console tab, replace the Hello world!
in the exports function with required the argument, click on Run, and then Save Draft.
Deploying serverless functions
To start using the serverless functions in our application, we need to deploy them. To do this, click on the Review Draft & Deploy button, scroll down and then click on Deploy.
We should get a prompt showing the status of our deployment.
Finally! Integration with Vue.js
To integrate MongoDB Realm in our application, we need to install the dependencies with:
npm i realm-web
realm-web
is a library for accessing MongoDB Realm from a web-browser.
Setup an Environment Variable
First, we need to create a .env
file in the project root directory, and in this file, add the snippet below:
VUE_APP_REALM_APP_ID=<your-realm-app-id>
To get our Realm App ID, we need to click on the copy icon as shown below:
Setup MongoDB Realm
Next, we need to create a utils
folder in the src
folder, and in this folder, create a mongo.client.ts
file and add the code snippet below:
The snippet above does the following:
- Import the required dependencies.
- Create a variable to store the Realm App ID.
- Create and export an instance of MongoDB Realm and pass the App ID. The bang
!
in front ofREALM_APP_ID
tells the compiler to relax the non-null constraint error(Meaning the parameter cannot be null or undefined) - Create and export the credential type we will be using for this app. We configure this authentication option earlier.
Get All Users
To get all users, we need to create an interface to describe the response properties. To do this, we need to create a models
folder in the src
folder, and in this folder, create a user.interface.ts
file and add the code snippet below:
PS: The question mark in front of _id tells TypeScript that this property is optional since MongoDB automatically generates it.
Next, we need to modify App.vue
by updating it with the snippet below:
The snippet above does the following:
- Import the
IUser
interface,app
andcredentials
. - Create
users
property to manage the list of users. - Create a
getListOfUsers
function to authenticate our application using thecredentials
imported and get the list of users by accessing thegetAllUsers
serverless function we created earlier. Then update theusers
property and use themounted
hook to call the function.PS: The serverless function (getAllUsers in our case) called must be the same as the one defined on MongoDB Realm. - Update the mark-up to display the list of users.
Complete App.vue
Create A User
To create a user, we must first modify App.vue
by updating it with the snippet below
The snippet above does the following:
- Add a
userValue
property to thedata
property. - Create a
updateUserValue
function to update theuserValue
property - Include
watch
component property to monitor theuserValue
property and get the updated list of users if there is a change made to it. - Update the
Modal
component to accept theupdateUserValue
as aprop
.
Next, navigate to the Modal.vue
file inside the components
folder, update the props
, and create a user.
The snippet above does the following:
- Import the required dependencies.
- Add
updateUserValue
toprops
property - Modify the
onSubmitForm
function to authenticate our application using thecredentials
imported. Create a user by accessing thecreateUser
serverless function we created earlier, passing the required arguments (name, location and title)and then updating theuserValue
and form state.
Edit A User
To edit a user, we must first modify App.vue
by creating a property to manage the _id
of the user we want to edit and function to update it. We also updated the handleEditClick
function to update the property and pass it as props to the Modal
component.
Next, we need to populate our form when the Edit button is clicked. To do this, open Modal.vue
and update as shown below:
The snippet above does the following:
- Import the required dependencies.
- Add
editingId
toprops
property - Create a
getAUser
function to authenticate our application using thecredentials
imported. Get the selected user details using thegetSingleUser
serverless function and then update the form values. ThegetSingleUser
function also required us to converteditingId
to string usingBSON.ObjectID
function. - Include
watch
component property to monitor theisEdit
state, conditionally call thegetAUser
function and update form state.
Next, we need to update the onSubmitForm
function to include updating the users details by conditionally checking if it is an update action or not. Next, we need to call the editUser
serverless function and pass in the required parameters. Finally, update the updateUserValue
, restore the form back to default and close the Modal
component.
Complete Modal.Vue
Delete A User
To delete a user, we need to modify App.vue
by creating a handleDelete
function as shown below:
The snippet above does the following:
- Import the required dependencies.
- Creates a
deleteAUser
function that takes anid
as an argument, authenticate our application using thecredentials
. Delete selected user using thedeleteUser
serverless function and update theuserValue
state.
Complete App.vue
Finally, we can test our application by starting the development server and performing CRUD operations.
Conclusion
This post discussed how to create a database on MongoDB, create and deploy serverless functions using MongoDB Realm and consume the endpoints in a Vue.js application.
You may find these resources helpful:
Original Link: https://dev.to/hackmamba/going-serverless-with-mongodb-realm-vuejs-version-nld
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To