Невозможно ОПУБЛИКОВАТЬ с помощью Node.js Экспресс MongoDB Mongoose CoffeeScript

#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()