2013-10-20 33 views
0

當我試圖在Express中執行PUT請求時,它給了我這個錯誤,我不確定它的含義。ExpressJS Object PUT,DELETE沒有方法'toLowerCase'

這是我的玉:

extends layout 

block content 
    form(method="post" action="/meals/#{meal[0].id}", id="mealForm") 
     input(type="hidden", name="_method", value="PUT") 

     h4 Meal Type 
     input.span3(id="mealType", type="text", name="MealType", value="#{meal[0].meal_type}") 

     br 

     h4 Meal Details 
     input.span3(id="mealDetails", type="text", name="MealDetails", value="#{meal[0].meal_details}") 

     br 

     input.btn(type="submit", class="btn btn-primary btn-lg" value="Update") 

     form(method="post" action="/meals/#{meal[0].meal_id}", id="mealForm") 
      input(type="hidden", name="_method", value="DELETE") 

      input.btn(type="submit", class="btn btn-danger btn-lg" style='margin-left: 1px;' value="Delete") 

我不明白爲什麼這是行不通的。這是我的app.js:

app.put('/meals/:id', meal.getMeal) 

在meals.js

exports.getMeal = function(req, res){ 
    console.log('sa') 
    id = req.params.id 

    query = "Select * \ 
     From nutrition \ 
     Where id=%" 

    query = query.replace(/%/g, id) 

    db.query(query, function(err, row) { 
     console.log(query); 
     if (err) console.log(err) 
     res.render('edit', { meal: row }); 
}) 
} 

堆棧跟蹤:

500 TypeError: Object PUT,DELETE has no method 'toLowerCase' 
at Object.methodOverride [as handle] (\middleware\methodOverride.js:37:30) 
+1

安置自己的ExpressJS配置代碼 –

+0

開始使用'var'每一個新的變量之前(如'id'和'query')。 – robertklep

+0

查詢是一個全局變量。我會把它放在身份證上。 @hilarudeens我不知道你的意思是什麼文件,但我發佈package.json的快遞http://jsfiddle.net/aUDuL/ – user2417731

回答

2

你的問題是在玉模板嵌套HTML表單。 你基本上做的是這樣的:

<form method="post" action="/meals/#{meal[0].id}" id="mealForm"> 
    <input type="hidden" name="_method" value="PUT"> 
    <form method="post" action="/meals/#{meal[0].meal_id}" id="mealForm"> 
    <input type="hidden" name="_method" value="DELETE"> 
    </form> 
</form> 

表單不能嵌套。你可以在一個頁面上放置更多的文件,但它們不能重疊或嵌套。例如:

<form method="post" action="/meals/#{meal[0].id}" id="mealForm"> 
    <input type="hidden" name="_method" value="PUT"> 
</form> 
<form method="post" action="/meals/#{meal[0].meal_id}" id="mealForm"> 
    <input type="hidden" name="_method" value="DELETE"> 
</form> 

代碼的副作用是,它然後發送到一個Express作爲數組[「PUT」,「刪除」(因爲你有你形成兩個_method場 - 第二嵌套形式被忽略)而不是「PUT」或「DELETE」。 Express試圖將接收到的方法轉換爲小寫以進行比較,但Array沒有方法toLowerCase,即String。

你可能只需要修復您的玉模板縮進這樣的:

extends layout 

block content 
    form(method="post" action="/meals/#{meal[0].id}", id="mealForm") 
     input(type="hidden", name="_method", value="PUT") 

     h4 Meal Type 
     input.span3(id="mealType", type="text", name="MealType", value="#{meal[0].meal_type}") 

     br 

     h4 Meal Details 
     input.span3(id="mealDetails", type="text", name="MealDetails", value="#{meal[0].meal_details}") 

     br 

     input.btn(type="submit", class="btn btn-primary btn-lg" value="Update") 

    form(method="post" action="/meals/#{meal[0].meal_id}", id="mealForm") 
     input(type="hidden", name="_method", value="DELETE") 

     input.btn(type="submit", class="btn btn-danger btn-lg" style='margin-left: 1px;' value="Delete") 
相關問題