Hi people.
My project don’t pass second and third test but works fine for me.
I use an array to save urls instead a database like mongoose. I don’t know if its correct to pass these tests
My index.js is:
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const app = express();
const bodyParser = require('body-parser');
const dns = require('dns');
// Basic Configuration
const port = process.env.PORT || 3000;
app.use(cors());
app.use('/public', express.static(`${__dirname}/public`));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.get('/', function(req, res) {
res.sendFile(__dirname + '/views/index.html');
});
const urls = [];
app.post('/api/shorturl', (req, res) => {
let url = req.body.url.replace(/\/*$/, '');
let validUrl = url.replace(/^https:\/\/(www.)?/, '');
dns.lookup(validUrl, (err, address, family) => {
if (err) {
res.json({ error: 'invalid url' })
}
else {
if (!urls.includes(url)) {
urls.push(url);
}
res.json({
original_url: url,
short_url: urls.indexOf(url) + 1
});
}
});
});
app.get('/api/shorturl/:id', (req, res) => {
const externarlUrl = urls[req.params.id - 1];
res.redirect(externarlUrl);
});
app.listen(port, function() {
console.log(`Listening on port ${port}`);
});
I changed the name of sample.env file to .env and I deployed the project on Vercel.