#mongodb #node.js #coffeescript #express #mongoose
#mongodb #node.js #coffeescript #экспресс #мангуст
Вопрос:
Обновление: я нашел решение, посмотрите внизу этой страницы…
У меня Node.js , Express, MongoDB, проект Mongoose написан на CoffeScript, и я могу создавать и считывать данные, но не могу обновлять.
Вот как выглядит мой код;
app.js
# update
app.put "/admin/:id.:format?", (req, res) ->
Content.findById req.body.content.id, (err, c) ->
c.title = req.body.content.title
c.body = req.body.content.body
c.save (err) ->
switch req.params.format
when "json"
res.send c.__doc
else
res.redirect "/admin"
редактировать.jade
h2 Edit Content
form(method='post', action='/admin/' c.id)
input(name='content[id]', value=c.id, type='hidden')
input(name='_method', value='PUT', type='hidden')
div
label Title:
input(name='content[title]', value=c.title || '')
div
label Body:
textarea(name='content[body]')=c.body || ''
div
input(type='submit', value='Save')
И это то, что говорит моя консоль
127.0.0.1 - - [Thu, 13 Oct 2011 21:39:55 GMT] "POST /admin/4e96ec17fd7da7cb18000001 HTTP/1.1" 404 - "http://localhost:1234/admin/4e96ec17fd7da7cb18000001/edit" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.83 Safari/535.2"
И это то, что говорит мне мой браузер
Cannot POST /admin/4e96ec17fd7da7cb18000001
Ответ №1:
Форма отправляет POST-запрос на сервер, но ваш маршрут предназначен для запросов PUT.
Комментарии:
1. И в случае, если это не очевидно, сделайте
form(method='put'...
, чтобы исправить это, или просто ПОМЕСТИТЕ с помощью ajax, как это делают крутые ребята.2. Но есть ввод (name = ‘_method’, value =’PUT’, type = ‘hidden’), который должен исправить это в Express
Ответ №2:
Я нашел решение на http://expressjs.com/guide.html:
«При использовании таких методов, как PUT с помощью формы, мы можем использовать скрытый ввод с именем _method , который можно использовать для изменения метода HTTP. Для этого нам сначала понадобится промежуточное ПО methodOverride, которое должно быть размещено под bodyParser, чтобы оно могло использовать его req.body, содержащий значения формы. «
app.use express.bodyParser()
app.use express.methodOverride()