Не удается POST с Node.js Express MongoDB Mongoose CoffeeScript - PullRequest
2 голосов
/ 14 октября 2011

Обновление: Я нашел решение, посмотрите внизу этой страницы ...

У меня есть проект 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"

edit.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

Ответы [ 2 ]

5 голосов
/ 14 октября 2011

Я нашел решение на http://expressjs.com/guide.html:

"При использовании таких методов, как PUT с формой, мы можем использовать скрытый ввод с именем _method, который можно использовать для изменения метода HTTP. Для этогоСначала нам нужно промежуточное программное обеспечение methodOverride, , которое должно быть расположено ниже bodyParser , чтобы оно могло использовать свой req.body, содержащий значения формы. "

app.use express.bodyParser()
app.use express.methodOverride()
5 голосов
/ 14 октября 2011

Форма отправляет на сервер запрос POST , но ваш маршрут предназначен для PUT запросов.

...