Skip to content

Last modified: April 17, 2025

User Data Demo (MongoDB)

USER_DATA/
├── routes/
│   └── api.js
│   └── users.js
├── public/
│   └── index.html
│   └── index.js
│   └── stylesheets/
│       └── style.css
├── models.js
└── app.js

app.js

import express from 'express';
import path from 'path';
import cookieParser from 'cookie-parser';
import logger from 'morgan';

import models from "./models.js"

import usersRouter from './routes/users.js';
import apiRouter from './routes/api.js'

import { fileURLToPath } from 'url';
import { dirname } from 'path';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

var app = express();

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use((req, res, next) => {
    req.models = models
    next()
})

app.use('/users', usersRouter);
app.use('/api', apiRouter)


export default app;

model.js

import mongoose from 'mongoose'

const models = {}

console.log("connecting to mongodb")

await mongoose.connect("mongodb+srv://<myusername>:<mypw>@cluster0.i36zdqv.mongodb.net/<tablename>")

console.log("successfully connected to mongodb!")

const userSchema = new mongoose.Schema({
    first_name: String,
    last_name: String,
    favorite_ice_cream: String
})

models.User = mongoose.model('User', userSchema)

console.log("finished creating models")

export default models

api.js

import { promises as fs } from 'fs'
import express from 'express'
const router = express.Router();

router.get('/getUsers', async (req, res) => {
    let allUsers = await req.models.User.find()
    res.json(allUsers)
})

router.post('/users', async (req, res) => {
    console.log(req.body)

    const newUser = new req.models.User({
        first_name: req.body.first_name,
        last_name: req.body.last_name,
        favorite_ice_cream: req.body.favorite_ice_cream
    })

    await newUser.save()

    res.send("success")
})

export default router;

users.js

import express from 'express';
var router = express.Router();

router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

export default router;

index.html

<html>

<head>
  <title>User Info Uploader</title>
  <link rel="stylesheet" href="/stylesheets/style.css">
  <script src="index.js"></script>
</head>

<body>
  <h1>User Info Uploader</h1>
  First Name: <input type="text" id="first_name_input" />
  <br>
  <br>
  Last Name: <input type="text" id="last_name_input" />
  <br>
  <br>
  Favorite Ice Cream: <input type="text" id="favorite_ice_cream_input" />
  <br>
  <br>
  <button onclick="createUser()">Create User</button>
  <br>
  <br>
  <button onclick="getUsers()">Load Users</button>
  <div id="results"></div>
</body>

</html>

index.js

async function getUsers(){
    let response = await fetch("api/getUsers")
    let dataJson = await response.json()

    document.getElementById("results").innerHTML = JSON.stringify(dataJson)
}

async function createUser(){
    // data from html
    let first_name = document.getElementById("first_name_input").value
    let last_name = document.getElementById("last_name_input").value
    let favorite_ice_cream = document.getElementById("favorite_ice_cream_input").value

    let myData = {
        first_name: first_name,
        last_name: last_name,
        favorite_ice_cream: favorite_ice_cream
    }
    // send the data to server as a "POST" request
    const response = await fetch('api/users', {
        method: "POST",
        body: JSON.stringify(myData),
        headers: {
            'Content-Type' : 'application/json'
        }
    })
}