const dotenv = require("dotenv"); const express = require("express"); const cors = require("cors"); const mongoose = require("mongoose"); const shortid = require("shortid"); const Url = require("./Url"); const utils = require("./Util/util"); // configure dotenv dotenv.config(); const app = express(); // cors for cross origin requesters to the frontend application app.use(cors()); // app.use(express.json()); // Database connection mongoose .connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true, }) .then(() => { console.log(`Db Connected`); }) .catch(err => { console.log(err.message); }); // get all saved URLs app.get("/all", async (req, res, next) => { Url.find((error, data) => { if (error) { return next(error); } else { res.json(data); } }); }); // URL shortener endpoint app.post("/short", async (req, res) => { console.log("HERE", req.body.url); const { origUrl } = req.body; const base = process.env.DOMAIN_URL; const urlId = shortid.generate(); if (utils.validateUrl(origUrl)) { try { let url = await Url.findOne({ origUrl }); if (url) { res.json(url); } else { const shortUrl = `${base}/${urlId}`; url = new Url({ origUrl, shortUrl, urlId, date: new Date(), }); await url.save(); res.json(url); } } catch (err) { console.log(err); res.status(500).json("Server Error"); } } else { res.status(400).json("Invalid Original Url"); } }); // redirect endpoint app.get("/:urlId", async (req, res) => { try { const url = await Url.findOne({ urlId: req.params.urlId }); console.log(url); if (url) { url.clicks++; url.save(); return res.redirect(url.origUrl); } else res.status(404).json("Not found"); } catch (err) { console.log(err); res.status(500).json("Server Error"); } }); // Port Listenning on 3333 const PORT = process.env.PORT || 3333; app.listen(PORT, () => { console.log(`Server is running at PORT ${PORT}`); });