Skip to content

Darknessking13/pyxify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

5 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Pyxify

A lightweight and fast web framework for Node.js. Pyxify provides an intuitive API for building web applications and RESTful APIs with features like routing, middleware support, view engine integration, and more.

Features

  • ๐Ÿš€ Lightweight and fast
  • ๐Ÿ›ฃ๏ธ Intuitive routing system with parameter support
  • ๐Ÿ”„ Middleware support
  • ๐ŸŽจ Multiple view engine support (Nunjucks, EJS, Pug)
  • ๐ŸŽฎ Controller system
  • ๐Ÿ“ฆ Built-in caching
  • ๐Ÿ”’ Error handling
  • ๐Ÿ—‚๏ธ Static file serving

Installation

npm install pyxify

Quick Start

const pyxify = require('pyxify');
const app = pyxify();

app.get('/', (req, res) => {
  res.json({ message: 'Hello, Pyxify!' });
});

app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

Routing

Basic Routes

const pyxify = require('pyxify');
const Router = pyxify.Router;

const router = new Router();

router.get('/', (req, res) => {
  res.json({ message: 'Hello, World!' });
});

router.post('/users', (req, res) => {
  // Handle user creation
});

Route Parameters

router.get('/users/:id', (req, res) => {
  const userId = req.params.id;
  res.json({ message: `Fetching user ${userId}` });
});

Using Routers

// routes/users.js
const pyxify = require('pyxify');
const Router = pyxify.Router;

const router = new Router();

router.get('/', (req, res) => {
  res.json({ users: ['Alice', 'Bob'] });
});

module.exports = router;

// app.js
const usersRouter = require('./routes/users');
app.use('/api/users', usersRouter);

Middleware

Creating Middleware

function loggerMiddleware(req, res, next) {
  console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`);
  next();
}

app.use(loggerMiddleware);

Route-Specific Middleware

function authMiddleware(req, res, next) {
  if (req.headers.authorization) {
    next();
  } else {
    res.statusCode = 401;
    res.json({ error: 'Unauthorized' });
  }
}

router.get('/protected', authMiddleware, (req, res) => {
  res.json({ message: 'Protected route' });
});

View Engines

Pyxify supports multiple view engines including Nunjucks, EJS, and Pug.

app.set('viewsFolder', './views');
app.setViewEngine('nunjucks', { autoescape: true });

app.get('/', (req, res) => {
  res.render('index.html', {
    title: 'Welcome',
    message: 'Hello from Pyxify!'
  });
});

Controllers

// controllers/userController.js
class UserController {
  static getAllUsers(req, res) {
    res.json({ users: ['Alice', 'Bob'] });
  }

  static getUserById(req, res) {
    const userId = req.params.id;
    res.json({ userId });
  }
}

module.exports = UserController;

// routes/users.js
const UserController = require('../controllers/userController');
router.get('/', UserController.getAllUsers);
router.get('/:id', UserController.getUserById);

Error Handling

function errorHandler(err, req, res, next) {
  console.error(err);
  res.statusCode = err.statusCode || 500;
  res.json({
    error: err.message || 'Internal Server Error'
  });
}

app.use(errorHandler);

Static Files

app.static('/public', './public');

Project Structure

Recommended project structure:

my-app/
โ”œโ”€โ”€ controllers/
โ”‚   โ””โ”€โ”€ userController.js
โ”œโ”€โ”€ middleware/
โ”‚   โ”œโ”€โ”€ auth.js
โ”‚   โ””โ”€โ”€ errorHandler.js
โ”œโ”€โ”€ routes/
โ”‚   โ”œโ”€โ”€ index.js
โ”‚   โ””โ”€โ”€ users.js
โ”œโ”€โ”€ views/
โ”‚   โ””โ”€โ”€ index.html
โ”œโ”€โ”€ public/
โ”‚   โ”œโ”€โ”€ css/
โ”‚   โ””โ”€โ”€ js/
โ”œโ”€โ”€ app.js
โ””โ”€โ”€ package.json

Configuration

app.set('maxJsonSize', 1024 * 1024); // Set max JSON size to 1MB

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT

Author

  • ! ๏ผคแด‡แด ษชสŸษชั•สœ ๏ฝƒสœส€แดษดษชแด„สŸแด‡ั•

Support

<<<<<<< HEAD If you have any questions or need help, please open an issue on GitHub.

About

A lightweight and fast web framework for Node.js

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published