gpt4 book ai didi

javascript - ExpressJS 对象 PUT、DELETE 没有方法 'toLowerCase'

转载 作者:行者123 更新时间:2023-12-02 18:13:56 25 4
gpt4 key购买 nike

当我尝试在 Express 中执行 PUT 请求时,它给出了该错误,但我不太确定它的含义。

这是我的 Jade :

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)

最佳答案

您的问题是您将 HTML 表单嵌套在 Jade 模板中。您基本上要做的是:

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

代码的副作用是,它会作为数组 ["PUT", "DELETE"] 发送到 Express(因为表单中有两个 _method 字段 - 第二个嵌套表单被忽略),而不是仅 "放置”或“删除”。 Express 尝试将接收到的方法转换为小写以进行比较,但 Array 没有 String 具有的 toLowerCase 方法。

您可能只需要像这样修复 Jade 模板缩进:

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")

关于javascript - ExpressJS 对象 PUT、DELETE 没有方法 'toLowerCase',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19474616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com