Skip to content

Commit d21ba27

Browse files
authored
Merge pull request #740 from beingatushar/main
Added Project: url-shortner using Node, Express, MongoDB
2 parents ba5f61a + 7673e4f commit d21ba27

File tree

1,798 files changed

+385454
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,798 files changed

+385454
-0
lines changed

url-shortener/app.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
const express = require("express");
2+
const app = express();
3+
const mongoose = require("mongoose");
4+
const ShortUrl = require("./models/shortUrl");
5+
const PORT = process.env.PORT || 3000;
6+
const methodOverride = require("method-override");
7+
8+
mongoose.connect("mongodb://127.0.0.1/urlShortener", {
9+
useNewUrlParser: true,
10+
useUnifiedTopology: true,
11+
});
12+
13+
app.use(methodOverride("_method"));
14+
app.set("view engine", "ejs");
15+
app.use(express.urlencoded({ extended: false }));
16+
17+
app.get("/", async (req, res) => {
18+
const shortUrls = await ShortUrl.find();
19+
res.render("index", { shortUrls: shortUrls });
20+
});
21+
22+
app.post("/", async (req, res) => {
23+
if (req.body.short) {
24+
await ShortUrl.create({
25+
full: req.body.fullUrl,
26+
short: req.body.short,
27+
createdAt: new Date(),
28+
lastVisitedAt: new Date(),
29+
});
30+
} else {
31+
await ShortUrl.create({
32+
full: req.body.fullUrl,
33+
createdAt: new Date(),
34+
lastVisitedAt: new Date(),
35+
});
36+
}
37+
res.redirect("/");
38+
});
39+
app.delete("/:shortUrl", async (req, res) => {
40+
await ShortUrl.findOneAndDelete({ short: req.params.shortUrl });
41+
res.redirect("/");
42+
});
43+
44+
app.get("/:shortUrl", async (req, res) => {
45+
const shortUrl = await ShortUrl.findOne({ short: req.params.shortUrl });
46+
if (shortUrl == null) return res.sendStatus(404);
47+
48+
shortUrl.clicks++;
49+
shortUrl.lastVisitedAt = new Date();
50+
shortUrl.save();
51+
52+
res.redirect(shortUrl.full);
53+
});
54+
55+
app.listen(PORT);

url-shortener/models/shortUrl.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const mongoose = require('mongoose')
2+
const shortId = require('shortid')
3+
const shortUrlSchema = new mongoose.Schema({
4+
full: {
5+
type: String,
6+
required: true
7+
},
8+
short: {
9+
type: String,
10+
required: true,
11+
unique: true,
12+
default: shortId.generate
13+
},
14+
createdAt: {
15+
type: Date,
16+
required: true,
17+
default: new Date(),
18+
unmodifiable: true
19+
20+
},
21+
lastVisitedAt: {
22+
type: Date,
23+
required: true,
24+
default: new Date()
25+
},
26+
clicks: {
27+
type: Number,
28+
required: true,
29+
default: 0
30+
}
31+
})
32+
module.exports = mongoose.model('ShortUrl', shortUrlSchema);

url-shortener/node_modules/.bin/ejs

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

url-shortener/node_modules/.bin/ejs.cmd

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

url-shortener/node_modules/.bin/ejs.ps1

Lines changed: 28 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

url-shortener/node_modules/.bin/jake

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

url-shortener/node_modules/.bin/jake.cmd

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

url-shortener/node_modules/.bin/jake.ps1

Lines changed: 28 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

url-shortener/node_modules/.bin/mime

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

url-shortener/node_modules/.bin/mime.cmd

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

url-shortener/node_modules/.bin/mime.ps1

Lines changed: 28 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)