UNPKG

ojparty

Version:

OJParty is a lightweight Node.js framework that enhances the default HTTP module by offering Express-like routing with added support for file uploads and session management, making it easy to build web applications without heavy dependencies.

260 lines (214 loc) 7.03 kB
# OJParty Framework OJParty is a lightweight Node.js framework designed to provide developers with a straightforward and powerful way to build web applications. With support for dynamic templating, session management, file uploads, and database interactions, OJParty streamlines the process of developing modern web applications. ## Features - **Dynamic Templating**: Embed JavaScript directly within `.ojp` files for powerful, server-side rendering. - **Session Management**: Easily manage user sessions with intuitive methods. - **File Uploads**: Handle file uploads with minimal configuration. - **MySQL Database Integration**: Interact with MySQL databases seamlessly. - **Static File Serving**: Serve static files easily with configurable settings. - **Custom 404 Page**: Define a custom 404 error page to enhance user experience. ## Installation ```bash npm install ojparty ``` ## Quick Start Here's a simple example to get you started: ```javascript const ojp = require("ojparty"); const app = ojp.ojparty.app(); app.settings({ serveStatic: true, // Enable static file serving 404: '404.html' // Set default 404 page }); app.get("/", (req, res) => { res.ojp('index.html'); res.end(); }); app.listen(8080); ``` ## Basic Usage Here’s how to create a simple server with OJParty, featuring session management, file upload capabilities, and more. ### Example 1: Handling Sessions and File Uploads ```javascript const ojp = require("ojparty"); const app = ojp.ojparty.app(); app.get("/", (req, res) => { req.setSession('username', req.query.name); res.sendFile('index.html'); }); app.get("/profile", (req, res) => { res.send(`Welcome to your profile page, ${req.session.username}`); }); app.post("/uploadfile", (req, res) => { res.send(JSON.stringify(req.files)); }); app.post("/unset-session", (req, res) => { req.unsetSession('username'); res.setHeader('Access-Control-Allow-Origin', '*'); res.send('Your session has been unset'); }); app.listen(210, () => { console.log('Server is running on port 210'); }); ``` ### Example 2: Parsing Forms and Handling File Uploads ```javascript const ojp = require("ojparty"); const http = require("http"); const form = ojp.ojparty.forms; const serve = http.createServer((req, res) => { if (req.method == "POST") { form(req, (data) => { res.setHeader('Content-Type', 'text/plain'); res.statusCode = 200; res.write(Buffer.from(JSON.stringify(data))); res.end(); }); } if (req.method == "GET") { const fs = require('fs'); try { const data = fs.readFileSync('form.html'); res.setHeader('Content-Type', 'text/html'); res.statusCode = 200; res.write(Buffer.from(data)); res.end(); } catch (e) { res.setHeader('Content-Type', 'text/html'); res.statusCode = 500; res.write(Buffer.from(e.toString())); res.end(); } } }); serve.listen(302, () => { console.log('Server is running on port 302'); }); ``` ### Example 3: File Upload with Utilities ```javascript const ojp = require("ojparty"); const http = require("http"); const form = ojp.ojparty.forms; const util = ojp.ojparty.util; const serve = http.createServer((req, res) => { if (req.method == "POST") { form(req, (data) => { res.setHeader('Content-Type', 'text/plain'); res.statusCode = 200; for (let i = 0; i < data.files.length; i++) { util.writeFile(`uploads/${data.files[i].fileName}`, data.files[i].file.data); res.write(`${data.files[i].fileName} has been written to /uploads/${data.files[i].fileName}. `); } res.end(); }); } if (req.method == "GET") { const fs = require('fs'); try { const data = fs.readFileSync('uploadform.html'); res.setHeader('Content-Type', 'text/html'); res.statusCode = 200; res.write(Buffer.from(data)); res.end(); } catch (e) { res.setHeader('Content-Type', 'text/html'); res.statusCode = 500; res.write(Buffer.from(e.toString())); res.end(); } } }); serve.listen(303, () => { console.log('Server is running on port 303'); }); ``` ## Templating with OJP Files `OJParty` allows you to embed JavaScript within your .ojp files using the special tags `$[ojp]` and `$[/ojp]`. You can also access variables passed from the app functions directly within the .ojp file. ### Example ```javascript app.get("/profile", (req, res) => { const userProfile = { name: "Samuel", age: 23, hobbies: ["swimming", "cooking"] }; res.ojp('profile.ojp', userProfile); res.end(); }); ``` ### profile.ojp ```javascript <h1>Welcome, $[name]</h1> <p>Age: $[age]</p> <p>Hobbies:</p> <ul> $[ojp] var hobbies = $[hobbies]; hobbies.forEach(function(hobby) { sam(`<li>${hobby}</li>`); }); $[/ojp] </ul> ``` ### Session Management ```javascript app.get("/login", (req, res) => { req.setSession('username', 'Samuel'); res.ojp('dashboard.ojp'); res.end(); }); app.get("/dashboard", (req, res) => { if (req.session.username) { res.ojp('dashboard.ojp', { username: req.session.username }); } else { res.setHeader('location', '/login'); res.statusCode = 302; } res.end(); }); ``` ### Handling File Uploads ```javascript app.post("/upload", (req, res) => { const uploadedFiles = req.files; res.ojp('upload-result.ojp', { files: uploadedFiles }); res.end(); }); ``` ### Database Interaction ```javascript const mysql = require("mysql"); const connection = mysql.createConnection({ host: "localhost", user: "root", password: "", database: "ojp" }); app.post("/register", (req, res) => { const { fullname, username, email, password } = req.body; const userId = ojp.util.random('mix', 24); connection.query( "INSERT INTO users (userId, fullname, username, email, password) VALUES (?, ?, ?, ?, ?)", [userId, fullname, username, email, password], (err) => { if (err) throw err; req.setSession('userId', userId); res.ojp('welcome.ojp'); res.end(); } ); }); ``` ### Configuration with app.settings() You can customize your application settings using `app.settings()`: ```javascript app.settings({ serveStatic: true, // Enables serving of static files 404: '404.html' // Specifies the default 404 error page }); ``` - ** serveStatic: ** Set to true or false to enable or disable serving static files. - ** 404: ** Specify the file path for the custom 404 error page. ### Contributing If you'd like to contribute to the OJParty framework, please fork the repository and submit a pull request. We welcome contributions from the community!