Set Up Your Node.js Environment
- Ensure you have Node.js and npm installed on your computer. You can check their versions by running
node -v
and npm -v
in the terminal.
- Create a new directory for your project and initialize it with
npm init -y
to create a package.json
file.
Install Required Packages
- Use the
axios
package to make HTTP requests. Install it by running:
npm install axios
- Optionally, install
dotenv
to manage your API key more securely. This helps to keep the API key out of your source code:
npm install dotenv
Configure Environment Variables
- Create a new
.env
file in the root of your project directory and add your Finnhub.io API key like so:
FINNHUB_API_KEY=your_finnhub_api_key_here
- Load this configuration in your main JavaScript file at the start by requiring
dotenv
:
require('dotenv').config();
Write the Function to Fetch Stock Data
- Create a new JavaScript file, say
fetchStockData.js
, and include the following code to fetch stock data:
const axios = require('axios');
async function fetchStockData(symbol) {
try {
const apiKey = process.env.FINNHUB_API_KEY;
const url = `https://finnhub.io/api/v1/quote?symbol=${symbol}&token=${apiKey}`;
const response = await axios.get(url);
return response.data;
} catch (error) {
console.error(`Error fetching stock data: ${error.message}`);
throw error;
}
}
// Usage example
fetchStockData('AAPL').then(data => console.log(data)).catch(error => console.error(error));
Understand the Output
- When you run the above function with a valid symbol like 'AAPL', it should output an object containing stock data such as current price, high, low, open price, etc.
- Example output:
{
"c": 145.81, // Current price
"h": 146.13, // High price of the day
"l": 143.76, // Low price of the day
"o": 144.45, // Open price of the day
"pc": 144.12 // Previous close price
}
Error Handling
- Ensure you handle various types of errors such as network issues or invalid API responses by using
try...catch
blocks within your function.
- Log these errors comfortably using
console.error
to diagnose issues.
Optimize and Extend the Functionality
- For a more extensive solution, consider adding additional functions for error logging or fetching multiple stocks concurrently using Promise.all() if required.
- Integrate user input handling or a front-end component to dynamically fetch and display data.
- Possibly cache data if historical data is not frequently changing to minimize API calls and potential costs.