105 lines
2.4 KiB
JavaScript
105 lines
2.4 KiB
JavaScript
/* eslint-disable no-unused-vars */
|
|
require('dotenv').config()
|
|
const express = require('express')
|
|
const app = express()
|
|
const cors = require('cors')
|
|
const morgan = require('morgan')
|
|
const Phonebook = require('./models/phonebook')
|
|
|
|
app.use(cors())
|
|
app.use(express.json())
|
|
app.use(express.static('build'))
|
|
|
|
morgan.token('body', function (req, res) {
|
|
return req.method === 'POST' ? JSON.stringify(req.body) : ''
|
|
})
|
|
|
|
app.use(
|
|
morgan(':method :url :status :res[content-length] - :response-time ms :body')
|
|
)
|
|
|
|
app.get('/api/persons', (req, res) => {
|
|
Phonebook.find({}).then(result => {
|
|
res.json(result)
|
|
})
|
|
})
|
|
|
|
app.get('/info', (req, res) => {
|
|
Phonebook.find({}).then(result => {
|
|
res.send(`<p>Phonebook has info for ${result.length} people</p><p>${Date()}</p>`)
|
|
})
|
|
})
|
|
|
|
app.get('/api/persons/:id', (req, res, next) => {
|
|
Phonebook.findById(req.params.id)
|
|
.then(result => {
|
|
if (result) {
|
|
res.json(result)
|
|
} else {
|
|
res.status(404).end()
|
|
}
|
|
})
|
|
.catch(error => next(error))
|
|
})
|
|
|
|
app.put('/api/persons/:id', (req, res, next) => {
|
|
const { name, number } = req.body
|
|
|
|
Phonebook.findByIdAndUpdate(
|
|
req.params.id,
|
|
{ name, number },
|
|
{ new: true, runValidators: true, context: 'query' }
|
|
)
|
|
.then(updatedPerson => {
|
|
res.json(updatedPerson)
|
|
})
|
|
.catch(error => next(error))
|
|
})
|
|
|
|
app.delete('/api/persons/:id', (req, res, next) => {
|
|
Phonebook.findByIdAndRemove(req.params.id)
|
|
.then(() => {
|
|
res.status(204).end()
|
|
})
|
|
.catch(error => next(error))
|
|
})
|
|
|
|
app.post('/api/persons', (req, res, next) => {
|
|
const { name, number } = req.body
|
|
if ( name || number) {
|
|
return res.status(400).json({
|
|
error: 'name or number is missing',
|
|
})
|
|
}
|
|
const phonebook = new Phonebook({
|
|
name: name,
|
|
number: number,
|
|
})
|
|
phonebook.save().then(result => {
|
|
res.json(result)
|
|
}).catch(error => next(error))
|
|
})
|
|
|
|
const unknownEndpoint = (req, res) => {
|
|
res.status(404).send({ error: 'unknown endpoint' })
|
|
}
|
|
|
|
app.use(unknownEndpoint)
|
|
|
|
const errorHandler = (error, res, next) => {
|
|
console.error(error.message)
|
|
|
|
if (error.name === 'CastError') {
|
|
return res.status(400).send({ error: 'malformatted id' })
|
|
} else if (error.name === 'ValidationError') {
|
|
return res.status(400).json({ error: error.message })
|
|
}
|
|
next(error)
|
|
}
|
|
|
|
app.use(errorHandler)
|
|
|
|
const PORT = process.env.PORT
|
|
app.listen(PORT, () => {
|
|
console.log(`Server running on port ${PORT}`)
|
|
}) |