Не удается создать или обновить Mongoose Express

#javascript #mongodb #express #http #mongoose

Вопрос:

Мое предложение состоит в том, чтобы:

Если пользователь попытается создать новую запись в телефонной книге для человека, имя которого уже есть в телефонной книге, интерфейс попытается обновить номер телефона существующей записи, отправив запрос HTTP PUT на уникальный URL-адрес записи.

Измените серверную часть для поддержки этого запроса.

Убедитесь, что интерфейс работает после внесения изменений.

Я не могу понять, как это сделать. У меня был ответ, в котором говорилось, что я должен просто использовать один метод app.put, но я не знаю, как на самом деле реализовать это и заставить его работать. Я получаю несколько ошибок при попытке обновления, в том числе «Выполнение обновления пути» _id » приведет к изменению неизменяемого поля. Я не знаю, нужно ли реализовывать простую ситуацию «создать или обновить» с помощью express и мангуста. Не мог бы кто-нибудь, пожалуйста, показать это в коде javascript?

Спасибо.

 require('dotenv').config() const morgan = require('morgan') const express = require("express") const cors = require("cors") const app = express() const Person = require('./models/phonenumbers')  app.use(express.json()) app.use(cors()) app.use(express.static('build'))  morgan.token('body', (req, res) =gt; JSON.stringify(req.body)); app.use( morgan(function (tokens, req, res) {  if(req.method === "POST"){  return [  tokens.method(req, res),  tokens.url(req, res),  tokens.status(req, res),  tokens.res(req, res, 'content-length'), '-',  tokens['response-time'](req, res), 'ms',  tokens.body(req,res)  ].join(' ')  } else {  return  } }))  app.get('/api/persons',(req,res) =gt; {  Person.find({}).then(persons =gt;  res.json(persons)) })  app.get('/info',(req,res) =gt; {  const d = new Date()  const leng = Person.find({}).then(persons =gt; {  persons.length  })  Person.count({},function(err,count){  res.send(  `  lt;pgt; Phonebook has info for ${count} people lt;/pgt;  lt;pgt; ${d} lt;/pgt;  `)  }) })  app.get('/api/persons/:id', (request, response, next) =gt; {  Person.findById(request.params.id)  .then(person =gt; {  if(person) {  response.json(person)  } else {  response.status(404).end()  }  })  //Next function invoked for error that continues  //to the error handler middleware  .catch(error =gt; next(error))  })  app.put('/api/persons/:id',(req,res,next) =gt; {  const body = req.body   const phone = {  name: body.name,  number:body.number  }   Person.findByIdAndUpdate(req.params.id, phone, { new: true })  .then(updatedPerson =gt; {  res.json(updatedPerson)  })  .catch(error =gt; next(error)) })  app.post('/api/persons',(req,res) =gt; {  const body = req.body  const containsNameNumber = body.name amp;amp; body.number   if(!containsNameNumber){  return res.status(400).json({  error:"must specify a name and a number"  })  }   const phone = new Person({  name: body.name,  number:body.number  })   phone.save().then(savedPerson =gt; {  res.json(savedPerson)  })  })  const errorHandler = (error, request, response, next) =gt; {  console.log(error.message)  if(error.name === 'CastError'){  return response.status(400).send({error:'malformatted id'})  }  next(error) }  app.use(errorHandler)  app.delete('/api/persons/:id',(req,res) =gt; {  Person.findByIdAndRemove(req.params.id)  .then(result =gt; {  res.status(204).end()  })  .catch(error =gt; next(error))  })  //const PORT = process.env.PORT || 3001 const PORT = 3002 app.listen(PORT, () =gt; {  console.log(`Server running on port ${PORT}`) })