URL Shortener Microservice issue

Ok i finally solved the challenge thanks to another user’s solution ! :grin:

Now it works.

The code:

require('dotenv').config();
const express = require('express');
const cors = require('cors');
const mongodb = require('mongodb');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const app = express();
const dns = require('dns');
//const URL = require('url').URL;
const { nanoid } = require('nanoid');

const MONGO_URI="mongodb+srv://BarabbaFDM:" + process.env['PW'] + "@cluster0.43tgt.mongodb.net/db1?retryWrites=true&w=majority";

mongoose.connect(MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true });

// Basic Configuration
const port = process.env.PORT || 3000;

app.use(cors());

app.use('/public', express.static(`${process.cwd()}/public`));

app.get('/', function(req, res) {
  res.sendFile(process.cwd() + '/views/index.html');
});

//Schema and model to store saved URLS
var ShortURL = mongoose.model('ShortURL', new mongoose.Schema({
  original_url: String,
  short_url: String,
}));

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

let urlExtractor = function(url) {
  var urlSplit = url.split("https://");
  if (urlSplit[1] == undefined) {
    return urlSplit[0].split("/")[0];
  } else {
    return urlSplit[1].split("/")[0];
  }
};

//Post data to the server, request URL, check if it is valid,
//send the shortened url to DB
app.post("/api/shorturl/", (req, res, next) => {
  let original_url = req.body.url;
  let extractedUrl = urlExtractor(original_url);
  
  /*//Variable for dns.lookup
  let newURL;

  try{
    newURL = new URL(original_url);
  } catch (err){
    return res.json({
      error: "invalid url"
    });
  }*/

  //Validate URL
  dns.resolveAny(extractedUrl, (err) => {
    if (err) {
      res.json({
        error: 'invalid url'
      });
    } else {
      let short_url = nanoid()
          
      //Create an object and save it to the DB
      let newURL = new ShortURL({
        original_url: original_url,
        short_url: short_url
      });

      newURL.save((err, data) => {
        if (err) return console.error(err);
      });

      res.json({
        original_url: original_url,
        short_url: short_url
      });
    };
  });
});

app.get("/api/shorturl/:short_url", (req, res) => {
  let short_url = req.params.short_url;

  ShortURL.findOne({short_url: short_url}, (err, data) => {
    if (err) return console.log(err);
    
    res.redirect(301, data.original_url);
    });
  });

// Your first API endpoint
app.get('/api/hello', function(req, res) {
  res.json({ greeting: 'hello API' });
});

app.listen(port, function() {
  console.log(`Listening on port ${port}`);
});

Thank you very much for your availability!