Как мне обновить, удалить и найти One с помощью pug + mon go + машинопись? - PullRequest
0 голосов
/ 09 января 2020

На странице ресторанов есть таблица, в которой отображаются данные зарегистрированных ресторанов, первое поле - кнопка для удаления непосредственно в базе данных. Второе поле таблицы - это кнопка go для редактирования страницы. View index.pug:

each restaurante in restaurantes
                tr  
                    td 
                        form(method='post' action='/restaurante/:id/delete')
                            button.btn.btn-primary(type='submit', name='id' value='#{restaurante._id}') 
                                img(src="images/del.png", alt="", width="20px", height="20px")
                    td 
                        a(href='/restaurantes/edit/:#{restaurante._id}') 
                            img(src="images/edit.png", alt="", width="20px", height="20px")
                    td #{restaurante.nome}

маршрутные рестораны:

restauranteRoutes.post('/restaurante/:id/delete', RestauranteController.delete);
restauranteRoutes.post('/restaurante/:id/update', RestauranteController.update);

restauranteController:

public async delete(req: Request, res: Response) { 
      Restaurante.deleteOne({ _id: req.params.id }, (err) => {
        if(err){
            res.send(err);
            console.log(err);
        }
        else{
          req.flash('sucess','Restaurante deletado com sucesso');
          res.redirect('/restaurantes');
        }
    });
  }

public async update(req: Request, res: Response) {           
    Restaurante.findOneAndUpdate({ _id: req.params.id }, req.body, { new: true }, (err, contact) => {
        if(err){
            res.send(err);
        }
        res.json(contact);
    });
  }

При удалении отображается ошибка:

{"stringValue":"\":id\"","kind":"ObjectId","value":":id","path":"_id","reason":{},"message":"Cast to ObjectId failed for value \":id\" at path \"_id\" for model \"Restaurante\"","name":"CastError"}

pug:

ОБНОВЛЕНИЕ: Мне удалось сделать удаление, например, так:

 form(method='post' action='/restaurantes/delete/' + restaurante._id)
                            <input type="image" src="images/del.png" alt="Submit", width="20px", height="20px" name="_id">

маршрут:

restauranteRoutes.post('/restaurantes/delete/:id', RestauranteController.delete);

restauranteController:

public async delete(req: Request, res: Response) { 
      var id = req.params.id;
      Restaurante.deleteOne({
          "_id": id
      }, (err) => {
          if (err) {
              res.send("Falha ao remover restaurante.");
          }
          else {
              // And forward to success page
              req.flash('sucess','Restaurante removido com sucesso');
              return res.redirect('/restaurantes');
          }
        });
  }

Тем не менее, теперь работает на странице edit.pug; Я не могу придать ресторану ценность. Nome появляется в поле Nome:

form(method='post' action='/restaurantes/update' style="margin-top: 2%")
                    div.form-group
                        label(for='name') Nome do restaurante:
                        input(type='text', placeholder='Nome do restaurante', name='nome', value=restaurante.nome) 
                    a(href="/restaurantes", class="btn btn-primary btn-lg" style='margin-left: 10px;') Cancelar
                    button.btn.btn-primary(type='submit' style='margin-left: 10px;') Atualizar

route:

restauranteRoutes.get('/restaurantes/edit/:id', RestauranteController.edit);

контроллер:

public async edit(req: Request, res: Response){
  Restaurante.find({ _id: req.params.id }, (err, restaurante) => {
    console.log(restaurante);
    res.render('./restaurantes/edit',{
        basedir : join(__dirname, '..', 'views'),
        restaurante: restaurante})
  })
};

console.log (restaurante) показывает мне, что данные извлекается, но я не могу получить его в поле зрения.

...