Tell us what’s happening:
In the URL Shortener Microservice project, I am facing a problem with passing the last test, which reads the following:
" If you pass an invalid URL that doesn’t follow the valid http://www.example.com
format, the JSON response will contain { error: 'invalid url' }
"
With my existing code, I am seeing {“error”: “Invalid URL”} when I insert a wrong URL.
However, for some unknow reasons, I can’t manage to pass the test. I don’t see any error at the Glitch debugger.
Your code so far
Here are my codes in server.js:
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const app = express();
var mongoose = require('mongoose');
// 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');
});
// 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}`);
});
// Database Connection
let uri = 'mongodb+srv://user1:' + process.env.PW + '@cluster0.htisd.mongodb.net/db1?retryWrites=true&w=majority'
mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true });
// Creating the URL model
let urlSchema = new mongoose.Schema({
original : {type: String, required: true},
short: Number
})
let Url = mongoose.model('Url', urlSchema)
let bodyParser = require('body-parser')
let responseObject = {}
app.post('/api/shorturl/new', bodyParser.urlencoded({ extended: false }) , (request, response) => {
let inputUrl = request.body['url']
let urlRegex = new RegExp(/[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)?/gi)
if(!inputUrl.match(urlRegex)){
response.json({error: 'Invalid URL'})
return
}
responseObject['original_url'] = inputUrl
let inputShort = 1
Url.findOne({})
.sort({short: 'desc'})
.exec((error, result) => {
if(!error && result != undefined){
inputShort = result.short + 1
}
if(!error){
Url.findOneAndUpdate(
{original: inputUrl},
{original: inputUrl, short: inputShort},
{new: true, upsert: true },
(error, savedUrl)=> {
if(!error){
responseObject['short_url'] = savedUrl.short
response.json(responseObject)
}
}
)
}
})
})
app.get('/api/shorturl/:input', (request, response) => {
let input = request.params.input
Url.findOne({short: input}, (error, result) => {
if(!error && result != undefined){
response.redirect(result.original)
}else{
response.json("invalid url")
}
})
})
How can I fix the issue?
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
.
Challenge: URL Shortener Microservice
Link to the challenge: