Hey there! I’m stuck at this challenge. The app works like it suppose I think, but im not passing the tests.
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const app = express();
const bodyParser = require("body-parser")
const mongoose = require('mongoose')
const { Schema } = mongoose
const dns = require("dns")
// Basic Configuration
const port = process.env.PORT || 3000;
mongoose.connect(process.env.MONGO_URI, (e) => { console.log("hola Mongo") })
app.use(bodyParser.urlencoded())
app.use(cors());
app.use('/public', express.static(`${process.cwd()}/public`));
app.get('/', function(req, res) {
res.sendFile(process.cwd() + '/views/index.html');
});
const urlSchema = new Schema({
original_url: String,
short_url: String
})
const urlModel = mongoose.model("URL", urlSchema)
// Your first API endpoint
app.post('/api/shorturl', function(req, res) {
let url = req.body.url
if (!/(https?:\/\/)/.test(url)) return res.send({ error: "invalid url" })
let urlDns = url.replace(url.match(/(https?:\/\/)/)[0], "")
dns.lookup(urlDns, async (e) => {
if (!e) {
const numUrl = await urlModel.estimatedDocumentCount();
let urlDoc = new urlModel({
original_url: url,
short_url: numUrl + 1
})
urlDoc.save()
res.json({ original_url: urlDoc.original_url, short_url: Number(urlDoc.short_url) });
}else{
res.status(404).send({error:"invalid HostName"})
}
})
})
app.get("/api/shorturl/:id",async (req,res)=>{
let id=req.params.id
let url=await urlModel.findOne({short_url:id})
res.redirect(url.original_url)
})
app.get("/api",async(req,res)=>{
const urls=await urlModel.find({})
res.json(urls)
})
app.get("/api/delete", async (req, res) => {
await urlModel.deleteMany({})
res.send("La base de datos ha sido eliminada")
})
app.listen(port, function() {
console.log(`Listening on port ${port}`);
});
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
Challenge: URL Shortener Microservice
Link to the challenge: