https://url-shortener-tau-sooty.vercel.app/
Clone repository (local branch):
git clone -b local https://github.com/ZakaryaMeddahi/URL-Shortener.git
Navigate to server folder:
cd server
Install node dependencies:
npm install
Create .env file and add your Atlas mongoDB URI in it, here is an example:
MONGO_URI=mongodb+srv://<username>:<password>@<cluster>.mfmabgc.mongodb.net/<dbname>?retryWrites=true&w=maj
Then add port, client side url and API endpoint in .env as well:
PORT=3000
CLIENT_DOMAIN=http://localhost:5500/client/
SERVER_DOMAIN=http://localhost:3000/
Start the application with this command line:
npm run start
Now you can start the frontend live server on port 5500 then navigate to http://localhost:5500/client/login.html Congratulation 🥳
Endpoint(URL): /api/v1/auth/register
Request Method: POST
Request Body
{
"username": <USERNAME>,
"email": <EMAIL>,
"password": <PASSWORD>
}
Success Response Body
{
"success": "true",
"user": {
"id": <ID>,
"username": <USERNAME>
}
}
Failure Response Body (Bad Request)
{
"success": "false",
"message": "Invalid username, email, password!"
}
Endpoint(URL): /api/v1/auth/login
Request Method: POST
Request Body
{
"email": <EMAIL>,
"password": <PASSWORD>
}
Success Response Body
{
"success": "true",
"user": {
"id": <ID>,
"username": <USERNAME>
}
}
Failure Response Body (Not Found)
{
"success": "false",
"message": "Incorrect password!"
}
Failure Response Body (Bad Request)
{
"success": "false",
"message": "Invalid email, password!"
}
Endpoint(URL): /api/v1/urls
Request Method: GET
Success Response Body
{
"success": "true",
"shortcuts": [
{
"id": <ID1>,
"pathname": <PATHNAME>,
"url": <URL>
},
{
"id": <ID2>,
"pathname": <PATHNAME>,
"url": <URL>
}
]
}
Endpoint(URL): /api/v1/urls
Request Method: POST
Request Body
{
"url": <URL>,
"pathname": <PATHNAME>
}
Success Response Body
{
"success": "true",
"shortcut": {
"id": <ID>,
"pathname": <PATHNAME>,
"url": <URL>
}
}
Failure Response Body
{
"success": "false",
"message": "Cannot create a shortcut, Provide a URL please!"
}
Endpoint(URL): /api/v1/urls/:id
Request Method: GET
Success Response Body
{
"success": "true",
"shortcut": {
"id": <ID>,
"pathname": <PATHNAME>,
"url": <URL>
}
}
Failure Response Body (Not Found)
{
"success": "false",
"message": "There is no shortcut with ID <ID>!"
}
Failure Response Body (Bad Request)
{
"success": "false",
"message": "<ID> is not ID, Provide a valid ID please!"
}
Endpoint(URL): /api/v1/urls/:id
Request Method: PUT
Request Body
{
"url": <URL>,
"pathname": <PATHNAME>
}
Success Response Body
{
"success": "true",
"url": {
"id": <ID>,
"pathname": <PATHNAME>,
"url": <URL>
}
}
Failure Response Body (Not Found)
{
"success": "false",
"message": "There is no shortcut with ID <ID>!"
}
Failure Response Body (Bad Request)
{
"success": "false",
"message": "<ID> is not ID, Provide a valid ID please!"
}
Endpoint(URL): /:pathname
Request Method: GET
Success Response Body
REDIRECT TO <URL>
Failure Response Body (Not Found)
REDIRECT TO not-found page