DEV Community

Cover image for How to Make API using NodeJS and Express
EneasLari
EneasLari

Posted on • Originally published at eneaslari.com

1

How to Make API using NodeJS and Express

Setting Up the Project

  1. Initial Setup:

    mkdir node-express-api
    cd node-express-api
    npm init -y
    
  2. Install Required Packages:

    npm install express mongoose
    

Folder Structure

  • node-express-api
    • models
    • controllers
    • routes
    • app.js

Models

1. User Model (models/user.js)

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
    name: String,
    email: String,
    password: String,
});

module.exports = mongoose.model('User', userSchema);
Enter fullscreen mode Exit fullscreen mode

2. Product Model (models/product.js)

const mongoose = require('mongoose');

const productSchema = new mongoose.Schema({
    name: String,
    price: Number,
    category: { type: mongoose.Schema.Types.ObjectId, ref: 'Category' }
});

module.exports = mongoose.model('Product', productSchema);
Enter fullscreen mode Exit fullscreen mode

3. Category Model (models/category.js)

const mongoose = require('mongoose');

const categorySchema = new mongoose.Schema({
    name: String,
});

module.exports = mongoose.model('Category', categorySchema);
Enter fullscreen mode Exit fullscreen mode

Controllers

1. User Controller (controllers/userController.js)

const User = require('../models/user');

exports.createUser = async (req, res) => {
    try {
        const user = new User(req.body);
        await user.save();
        res.status(201).json(user);
    } catch (error) {
        res.status(400).json({ error: error.message });
    }
};
Enter fullscreen mode Exit fullscreen mode

2. Product Controller (controllers/productController.js)

const Product = require('../models/product');

exports.createProduct = async (req, res) => {
    try {
        const product = new Product(req.body);
        await product.save();
        res.status(201).json(product);
    } catch (error) {
        res.status(400).json({ error: error.message });
    }
};
Enter fullscreen mode Exit fullscreen mode

3. Category Controller (controllers/categoryController.js)

const Category = require('../models/category');

exports.createCategory = async (req, res) => {
    try {
        const category = new Category(req.body);
        await category.save();
        res.status(201).json(category);
    } catch (error) {
        res.status(400).json({ error: error.message });
    }
};
Enter fullscreen mode Exit fullscreen mode

Routes

Routes Setup (routes/index.js)

const express = require('express');
const userController = require('../controllers/userController');
const productController = require('../controllers/productController');
const categoryController = require('../controllers/categoryController');

const router = express.Router();

router.post('/users', userController.createUser);
router.post('/products', productController.createProduct);
router.post('/categories', categoryController.createCategory);

module.exports = router;
Enter fullscreen mode Exit fullscreen mode

Bringing It All Together

app.js

const express = require('express');
const mongoose = require('mongoose');
const routes = require('./routes');

const app = express();

mongoose.connect('mongodb://localhost:27017/node-express-api', { useNewUrlParser: true, useUnifiedTopology: true });

app.use(express.json());
app.use('/api', routes);

const PORT = 3000;
app.listen(PORT, () => {
    console.log(`Server running on http://localhost:${PORT}`);
});
Enter fullscreen mode Exit fullscreen mode

Now, after setting up the above structure, you have the basic building blocks for an API in Node.js and Express. You can run the app with:

node app.js
Enter fullscreen mode Exit fullscreen mode

Remember, this is a basic structure, and there's much more you can do, such as adding error handling, validation, authentication, etc. I hope this provides a solid starting point!

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more