Run Node.js server functions directly from client-side JavaScript using WebSockets - without building an API or setting up endpoints.
- ✅ Call server-side Node.js functions directly from client code
- ✅ No API endpoints to maintain
- ✅ No build process modifications required
- ✅ Lazy-loading WebSocket connection
- ✅ Works in both development and production environments
- ✅ Secure SSL/TLS communication
- ✅ Detailed logging and error handling
npm install server-function-bridge
// server.js
const express = require('express');
const { setupServerFunctionBridge } = require('server-function-bridge/server');
const path = require('path');
// Create your Express app
const app = express();
// Setup the Server Function Bridge
setupServerFunctionBridge(app, {
port: 8080, // WebSocket port (default: 8080)
scriptsDir: path.join(__dirname, 'server-functions'), // Where your functions are stored
ssl: {
key: fs.readFileSync('path/to/key.pem'),
cert: fs.readFileSync('path/to/cert.pem')
}
});
// Your existing app setup
app.use(express.static('public'));
// Start your server
app.listen(3000, () => {
console.log('Server running on port 3000');
});
Create server-side functions in your server-functions
directory:
// server-functions/helloWorld.js
module.exports = async function helloWorld(name) {
return {
message: `Hello, ${name || 'World'}!`,
timestamp: new Date().toISOString()
};
};
// In your React component or JavaScript file
import { serverCall } from 'server-function-bridge/client';
// Create a server function reference
const helloWorld = serverCall('helloWorld');
// Call it like a normal function
const result = await helloWorld('John');
console.log(result.message); // "Hello, John!"
The setupServerFunctionBridge
function accepts the following options:
Option | Type | Default | Description |
---|---|---|---|
port |
Number | 8080 |
WebSocket server port |
scriptsDir |
String | path.join(process.cwd(), 'src', 'scripts') |
Directory containing server functions |
ssl |
Object | undefined |
SSL configuration with key and cert properties |
logging |
Boolean/Object | { enabled: true, detailed: false } |
Logging configuration |
path |
String | /ws |
WebSocket server path |
authFunction |
Function | undefined |
Optional function for connection authentication |
The serverCall
function accepts the following options:
// With custom options
const helloWorld = serverCall('helloWorld', {
timeout: 5000, // 5 second timeout (default: 10000)
reconnect: true, // Auto-reconnect on disconnection
debug: true // Verbose logging
});
import { getConnection, closeConnection } from 'server-function-bridge/client';
// Get the WebSocket connection
const connection = getConnection();
// Manually close the connection when done
closeConnection();
import { configure, serverCall } from 'server-function-bridge/client';
// Configure custom WebSocket URL
configure({
url: 'wss://api.example.com/websocket',
debug: true
});
// Now use serverCall as normal
const helloWorld = serverCall('helloWorld');
- The WebSocket server accepts connections from any origin by default
- Consider implementing the
authFunction
option for authentication - Use HTTPS and WSS protocols in production
- Be careful about which server functions you expose
MIT