```plaintext
API_ENDPOINT_BASE=http://localhost:8080
```
This will tell your Node.js application to use the WireMock server for API calls.
3. Examine the Application Entry Point
- The main file for the application is `index.js`, located in the `accuweather-api/src/api` directory.
- This file starts the `getWeather.js` module, which is essential for your Node.js application. It uses the `dotenv` package to load environment variables from the`.env` file.
- Based on the value of `API_ENDPOINT_BASE`, the application routes requests either to the WireMock server (`http://localhost:8080`) or the AccuWeather API. In this setup, it uses the WireMock server.
- The code ensures that the `ACCUWEATHER_API_KEY` is required only if the application is not using WireMock, enhancing efficiency and avoiding errors.
```javascript
require("dotenv").config();
const express = require("express");
const axios = require("axios");
const router = express.Router();
const API_ENDPOINT_BASE = process.env.API_ENDPOINT_BASE;
const API_KEY = process.env.ACCUWEATHER_API_KEY;
console.log('API_ENDPOINT_BASE:', API_ENDPOINT_BASE); // Log after it's defined
console.log('ACCUWEATHER_API_KEY is set:', !!API_KEY); // Log boolean instead of actual key
if (!API_ENDPOINT_BASE) {
throw new Error("API_ENDPOINT_BASE is not defined in environment variables");
}
// Only check for API key if not using WireMock
if (API_ENDPOINT_BASE !== 'http://localhost:8080' && !API_KEY) {
throw new Error("ACCUWEATHER_API_KEY is not defined in environment variables");
}
// Function to fetch the location key for the city
async function fetchLocationKey(townName) {
const { data: locationData } = await
axios.get(`${API_ENDPOINT_BASE}/locations/v1/cities/search`, {
params: { q: townName, details: false, apikey: API_KEY },
});
return locationData[0]?.Key;
}
```
4. Start the Node server
Before you start the Node server, ensure that you have already installed the node packages listed in the package.json file by running `npm install`.
```console
npm install
npm run start
```
You should see the following output:
```plaintext
> express-api-starter@1.2.0 start
> node src/index.js
API_ENDPOINT_BASE: http://localhost:8080
..
Listening: http://localhost:5001
```
The output indicates that your Node application has successfully started.
Keep this terminal window open.
5. Test the Mocked API
Open a new terminal window and run the following command to test the mocked API:
```console
$ curl "http://localhost:5001/api/v1/getWeather?city=Bengaluru"
```
You should see the following output:
```plaintext
{"city":"Bengaluru","temperature":27.1,"conditions":"Mostly cloudy","forecasts":[{"date":"2024-09-02T07:00:00+05:30","temperature":83,"conditions":"Partly sunny w/ t-storms"},{"date":"2024-09-03T07:00:00+05:30","temperature":83,"conditions":"Thunderstorms"},{"date":"2024-09-04T07:00:00+05:30","temperature":83,"conditions":"Intermittent clouds"},{"date":"2024-09-05T07:00:00+05:30","temperature":82,"conditions":"Dreary"},{"date":"2024-09-06T07:00:00+05:30","temperature":82,"conditions":"Dreary"}]}%
```
This indicates that your Node.js application is now successfully routing requests to the WireMock container and receiving the mocked responses
You might have noticed that you’re trying to use `http://localhost:5001` as the URL instead of port `8080`. This is because your Node.js application is running on port `5001`, and it's routing requests to the WireMock container that's listening on port `8080`.
> [!TIP]
> Before you proceed to the next step, ensure that you stop the node application service.
## Use a Live API in production to fetch real-time weather data from AccuWeather
To enhance your Node.js application with real-time weather data, you can seamlessly integrate the AccuWeather API. This section of the guide will walk you through the steps involved in setting up a non-containerized Node.js application and fetching weather information directly from the AccuWeather API.