2016-11-06 5 views
0

Я пытаюсь добавить страницу редактирования, где я могу изменить поле имени в mongodb. Но у меня возникают проблемы с маршрутизацией, может ли кто-нибудь помочь? здесь маршрутизация:Обновление Mongodb с узлом js express и PUG (JADE)

router.put('/edit', function(req, res) { 
user.findByIdAndUpdate({_id: req.params.id}, 
       { 
     name: req.body.name 
    }); 
    }); 

А вот edit.pug

extends layout 

block content 
    .main.container.clearfix 
    h1 Editing #{name}'s profile! 
    form(method="POST", action="/edit") 
    input(type="hidden", name="_method", value="PUT") 
    p Name: 
     input#name.form-control(type='text', value='#{name}') 
    p 
     input(type="submit") 

Спасибо

ответ

0

Хорошо, есть несколько вещей, которые я вижу здесь, я думаю, я могу помочь прояснить:

user.findByIdAndUpdate - не принимает объект для первого аргумента, просто _id. http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate

req.params - подключается к маршруту присоединен этот обратный вызов, так что в вашем маршруте вам нужно поставить /:id чтобы выразить, что значение может измениться, но будет доступен как req.params.id. В основном маршрут должен выглядеть router.put('/edit/:id', function(req, res) {... http://expressjs.com/en/guide/routing.html#route-parameters

Вы также можете захотеть взглянуть на options аргумент метода findByIdAndUpdate, так как по умолчанию она возвращает исходный документ из его поиска не один сохраняется в БД после обновления было применяется.

поэтому код узла должен выглядеть следующим образом:

router.put('/edit/:id', function(req, res) { 
user.findByIdAndUpdate(
    req.params.id, // Which _id mongoose should search for 
    { name: req.body.name }, //Updates to apply to the found document. 
    { new: true }); // This tells mongoose to return the new updates back from the db 
    }); 

 Смежные вопросы

  • Нет связанных вопросов^_^