NestJS Quickstart
Get started with Novu Framework in a NestJS application
In this guide, we will add a Novu Bridge Endpoint to a NestJS application and send our first test workflow.
Start Local Studio
Start the Local Studio by running:
npx novu dev
The Local Studio will be available at http://localhost:2022. This is where you can preview and test your workflows.
Install Required Packages
Install the Novu Framework package:
npm install @novu/framework
This package provides all the necessary tools to build and manage your notification workflows.
The NovuModule
is a NestJS module that registers the Novu Endpoint in your application.
The following example does not support NestJS dependency injection. If you need to @Injectable
dependencies in your workflow definition, see Advanced Usage.
Add Your Secret Key
Add your Novu Secret Key to your environment variables:
# .env
NOVU_SECRET_KEY=your_secret_key
Add a novu
folder in your src
folder as such src/novu/workflows.ts
that will contain your workflow definitions.
Start your NestJS application with the Novu Endpoint configured.
If your NestJS application is running on other than 4000
port, restart the npx novu dev
command with the port:
Test Your Workflow
Test your workflow by triggering it from the Local Studio or using the Novu API:
curl -X POST https://api.novu.co/v1/events/trigger \
-H 'Authorization: ApiKey YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "my-workflow",
"to": "subscriber-id",
"payload": {}
}'
You should see the notification being processed in your Local Studio.
Deploy Your App
Deploy your application to your preferred hosting provider. Make sure the /api/novu
endpoint is accessible from the internet.
For local development and testing, you can use tools like ngrok to expose your local server to the internet.
Next Steps
Now that you have your first workflow running, you can:
- Learn about Workflow Controls to expose no-code editing capabilities
- Explore different Channel Steps like Email, SMS, Push, and more
- Set up Action Steps like Delay and Digest
- Check out our React Email integration for building beautiful email templates
Advanced Usage (Dependency Injection)
If you need to inject dependencies into your workflow definition, you can use the registerAsync
method.
Add the NovuModule
using the registerAsync
method to your AppModule
.
For example, you might need to inject a service that fetches the user's name from a database. This is useful when you need to fetch data in realtime during the execution of your workflow.
An example UserService
is available below with hardcoded values, but in a real-world application you might use a database or an external API to fetch the user's name.
Finally, configure your NotificationService
to use the injected UserService
.
A full example NestJS application demonstrating dependency injection is available here.