Last active
May 16, 2018 10:15
-
-
Save reneviering/e5e166185abe1beb2f83f135af0abfe9 to your computer and use it in GitHub Desktop.
Simple node app for a simple address management example app. Simple CRUD routes, addresses are stored in-memory. It also uses faker to fake an amount of addresses definable via query parameter.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
const http = require('http'); | |
const express = require('express'), | |
bodyParser = require('body-parser'), | |
uuid = require('uuidv4'), | |
cors = require('cors'); | |
const faker = require('faker'); | |
let addresses = []; | |
const validateAddress = address => { | |
if (!address) return []; | |
const errorMessages = []; | |
if (!address.firstName) { | |
errorMessages.push('firstName is missing.'); | |
} | |
if (!address.lastName) { | |
errorMessages.push('lastName is missing.'); | |
} | |
if (!address.email) { | |
errorMessages.push('email is missing.'); | |
} | |
return errorMessages; | |
} | |
const app = express(); | |
app.use(cors()); | |
app.use(bodyParser.json()); | |
app.get('/addresses', (req, res) => { | |
if (req.query.fakeDataAmount && addresses.length !== Number(req.query.fakeDataAmount)) { | |
addresses = []; | |
for (let i=0; i<Number(req.query.fakeDataAmount); i++) { | |
addresses.push({ | |
id: uuid(), | |
firstName: faker.name.firstName(), | |
lastName: faker.name.lastName(), | |
email: faker.internet.email() | |
}) | |
} | |
} | |
res.send(addresses); | |
}); | |
app.get('/addresses/:addressId', (req, res) => { | |
const address = addresses.find(address => address.id === req.params.addressId); | |
if (!address) { | |
res.status(404); | |
return res.end(); | |
} | |
res.send(address); | |
}); | |
app.post('/addresses', (req, res) => { | |
const newAddress = req.body; | |
const errorMessages = validateAddress(newAddress); | |
if (errorMessages.length) { | |
res.status(400); | |
return res.send(errorMessages); | |
} | |
const addressToAdd = { | |
...newAddress, | |
id: uuid() | |
}; | |
addresses.push(addressToAdd); | |
res.send(addressToAdd); | |
}); | |
app.put('/addresses/:addressId', (req, res) => { | |
const addressId = req.params.addressId; | |
const newAddress = req.body; | |
const errorMessages = validateAddress(newAddress); | |
if (errorMessages.length) { | |
res.status(400); | |
return res.send(errorMessages); | |
} | |
const addressToChange = addresses.find(address => address.id === addressId); | |
addresses = addresses.map(address => { | |
if (address.id !== addressId) return address; | |
return { | |
...address, | |
...newAddress | |
}; | |
}); | |
const updatedAddress = addresses.find(address => address.id === addressId); | |
res.send(updatedAddress); | |
}); | |
app.delete('/addresses/:addressId', (req, res) => { | |
const addressId = req.params.addressId; | |
const addressToDelete = addresses.find(address => address.id === addressId); | |
if (!addressToDelete) { | |
res.status(404); | |
return res.end(); | |
} | |
addresses = addresses.filter(address => address.id !== addressId); | |
res.send(addressToDelete); | |
}); | |
app.listen(4000, () => { | |
console.log('Server is running on port 4000'); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "adress-server", | |
"version": "1.0.0", | |
"dependencies": { | |
"body-parser": "1.18.2", | |
"cors": "2.8.4", | |
"express": "4.16.3", | |
"faker": "4.1.0", | |
"uuidv4": "1.0.0" | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment