Set Up HarperDB:
Create a HarperDB instance (cloud or local).
Create a schema (e.g., chat_app) and a table (e.g., messages).
Backend (Node.js):
Initialize a Node.js project: npm init -y.
Install dependencies: npm install express socket.io harperdb.
Set up an Express server with Socket.IO for real-time communication.
Use HarperDB SDK to store and fetch messages.
const express = require("express");
const http = require("http");
const { Server } = require("socket.io");
const harperdb = require("harperdb");
const app = express();
const server = http.createServer(app);
const io = new Server(server);
const db = harperdb({
host: "your-harperdb-url",
username: "your-username",
password: "your-password",
});
io.on("connection", (socket) => {
console.log("A user connected");
socket.on("sendMessage", async (message) => {
await db.insert({
table: "messages",
records: [message],
});
io.emit("receiveMessage", message);
});
socket.on("disconnect", () => {
console.log("User disconnected");
});
});
server.listen(5000, () => console.log("Server running on port 5000"));
Frontend (React):
Create a React app: npx create-react-app chat-app.
Install Socket.IO client: npm install socket.io-client.
Connect to the backend and handle real-time messaging.
import React, { useEffect, useState } from "react";
import io from "socket.io-client";
const socket = io("http://localhost:5000");
function App() {
const [message, setMessage] = useState("");
const [messages, setMessages] = useState([]);
useEffect(() => {
socket.on("receiveMessage", (message) => {
setMessages((prev) => [...prev, message]);
});
}, []);
const sendMessage = () => {
socket.emit("sendMessage", { text: message, user: "User" });
setMessage("");
};
return (
<div>
<div>
{messages.map((msg, i) => (
<div key={i}>{msg.user}: {msg.text}</div>
))}
</div>
<input
value={message}
onChange={(e) => setMessage(e.target.value)}
/>
<button onClick={sendMessage}>Send</button>
</div>
);
}
export default App;
Run the App:
Start the backend: node server.js.
Start the frontend: npm start.