【发布时间】:2021-06-10 03:33:53
【问题描述】:
我有一个带有 ejs 视图引擎的快速应用程序。 在 ejs 模板中,我有一个带有 onClick 事件的按钮来触发获取请求:
<button class="remove-btn" onclick="removeGroceryItem('<%= index %>')" >Remove</button>
获取函数
function removeGroceryItem (id) {
fetch('/', {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ groceryItem: id })
})
.then((value)=> console.log(value))
.catch((e)=>console.error(e))
}
快速应用路由处理程序:
/* PUT grocery list*/
app.put('/', function(req, res, next) {
groceryItemsContainer.splice(Number.parseInt(req.body.groceryItem), 1)
res.render('index', {
title: 'Express Grocery List App',
notification: 'removed',
groceryList: groceryItemsContainer
})
res.end();
})
收到状态为 200 的 PUT 请求。但是 res.render 似乎没有被触发 -- 这是为什么呢??
【问题讨论】:
-
为什么你认为
res.render()没有被调用?你在fetch()上的.then()或.catch()得到什么结果?您是否在res.render()之前和之后放置了console.log()以查看它们是否显示输出?您是否意识到像fetch()这样的 Ajax 调用只是为您的 Javascript 获取数据 - 它不会自行更改浏览器页面。 -
另外,在调用
res.render()之后调用res.end()是一个错误和错误。res.render()已经自己调用了res.end()。所以,请删除res.end()。 -
正如@jfriend00 所指出的,您在
res.render()有机会做它需要做的事情之前调用res.end()。 -
从控制台,我看到有一个 PUT 请求,但是没有 GET 请求来获取样式和 javascript。所以我怀疑 res.render 已经运行了。
标签: express fetch ejs render put