Я ничего не меняю, но изменяю метод маршрута от «Post» до «Put», и по какой-то причине он его разрывает.Маршрут Expressjs/Nodejs работает с POST, но не с PUT
Маршрут POST работает отлично:
В пути в App.js с POST:
app.post('/editlisting/update',listing.update);
файл editListing.jade, который отправляет к нему:
extends layout
block content
div(class="container")
ul(class="userlist")
each listing, i in listings
li
h1 #{listing.name}
form(method='post', action='update' class='regform')
label Name:
input(type='text', name='name', value='#{listing.name}')
br
label Number of Guests:
input(type='text', name='noGuests', value='#{listing.noGuests}')
input(type='hidden', name='id', value='#{listing._id}')
label Price:
input(type='text', name='price', value='#{listing.price}')
input(type='submit', value='Update')
a(href='/') Home
Метод обновления in listing.js (я этого не меняю):
exports.update = function(req,res){
var conditions = {_id:req.body.id}
, update = {
name: req.body.name,
noGuests: req.body.noGuests,
price: req.body.price
}
, options = { multi: false };
Listing.update(conditions, update, options, callback);
function callback (err, numAffected) {
if(err) { throw err; }
res.redirect('/');
};
}
Тогда, когда я пытаюсь изменить его PUT ....
app.js:
app.put('/editlisting/update',listing.update);
editListing.Jade:
расширяет компоновки
block content
div(class="container")
ul(class="userlist")
each listing, i in listings
li
h1 #{listing.name}
form(method='put', action='update' class='regform')
label Name:
input(type='text', name='name', value='#{listing.name}')
br
label Number of Guests:
input(type='text', name='noGuests', value='#{listing.noGuests}')
input(type='hidden', name='id', value='#{listing._id}')
label Price:
input(type='text', name='price', value='#{listing.price}')
input(type='submit', value='Update')
a(href='/') Home
Это вызывает мое браузер, чтобы отобразить эту ошибку, когда я нажимаю кнопку «Обновить»:
4 | div (class = "container") 5 | ul (class = "userlist")> 6 | каждый листинг, я в листингах 7 | li 8 | h1 # {listing.name} 9 | форма (метод = «ставить», действие = «обновление» класс = «regform») Не удается прочитать свойство «длина» неопределенной
И это указывает на строки в моем файле editListing.jade:
each listing, i in listings
Кто-нибудь знает, в чем проблема?
У вас есть доступ к req.body, когда вы меняете метод на PUT? Console.log (req.body) в вашей функции обновления для проверки. Также проверьте, есть ли какие-либо записи, сделанные в вашей базе данных после обновления. – marton