97 lines
2.1 KiB
JavaScript
97 lines
2.1 KiB
JavaScript
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}`);
|
|
});
|