2011-10-13 75 views
2

更新:我找到了解決辦法,看在這個頁面的底部...不能與Node.js的快遞MongoDB的貓鼬的CoffeeScript POST

我有一個Node.js的,快速,MongoDB的,貓鼬使用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 

回答

5

我發現http://expressjs.com/guide.html溶液:

「當使用方法如用一個形式PUT,我們可以利用名爲_method一個隱藏的輸入,其可被用來改變的HTTP方法這樣做,我們首先需要methodOverride中間件,,它應該放在bodyParser以下,以便它可以利用它的包含表單值的請求。「

app.use express.bodyParser() 
app.use express.methodOverride() 
5

表格發送POST請求到服務器,但您的路由爲PUT請求。

+1

而在情況不是很明顯,做'表單(method =「把」 ...'修復它,或者只是使用Ajax PUT喜歡時尚的年輕人做。 –

+2

但是有一個輸入(名稱= '_method',value ='PUT',type ='hidden'),它應該在Express中解決這個問題 – Alfred