PUGJS脚本
form(id="form1" action="/delete" method="POST")
input(type="submit",name=+item['id'] value="delete")
我的ExpressJS代码
router.post('/delete', function(req, res, next) {
var id = req.params("i");
console.log("i am 0")
MongoClient.connect(url, function(err, db) {
console.log("i am 1")
db.collection('books', function(err, book) {
db.collection.deleteOne( {_id: new mongodb.ObjectID(id)} );
console.log("i am 2")
if (err) {
throw err;
} else {
db.close();
res.redirect('/');
}
});
});
});
尝试执行删除请求,但它甚至不打印(“我是0”) 无法确定代码有什么问题
NPM响应 POST /删除404 7.247毫秒-1202
答案 0 :(得分:1)
当您看到404时,根本原因肯定是您如何设置路由。如果此代码位于app.js / server.js(或您的根快速表达文件)中,则将成功调用该代码,但是404表示您已将其放置在辅助文件中,并在其中使用其他路径。 / p>
话虽如此,如果您想读取route参数(这是您的路由处理程序的第一行尝试执行的操作),那么在如何定义路由方面也会遇到问题。
router.post('/delete/:i', function...
表单本身没有通过名称(或ID)传递任何ID。您可以通过以下网址传递ID:
action= "/delete?id=" + id
...并使用req.query.id
在路由处理程序中读取此内容,或者您可以在表单中插入隐藏的输入并使用req.body.id
读取它。
此外,表单name
属性为has been deprecated,应替换为id
。
然后,请务必注意,帕格高度依赖于压痕。您粘贴的代码将生成一个空表格和一个单独的输入字段。
此:
form(id="form1" action="/delete" method="POST")
input(type="submit",name=+item['id'] value="delete")
生成此HTML:
<form id="form1" action="/delete" method="POST"></form>
<input type="submit" name="itemId" value="delete">
如果将哈巴狗模板更改为此(请注意输入行上的两个附加空格):
form(id="form1" action="/delete" method="POST")
input(type="submit",name=+item['id'] value="delete")
您将获得此消息,该消息应能按预期工作:
<form id="form1" action="/delete" method="POST">
<input type="submit" name="itemId" value="delete">
</form>
然后,您的delete function中存在问题,您缺少回调。
db.collection.deleteOne( {_id: new mongodb.ObjectID(id)} );
您需要在此处添加一个Promise或回调,否则您的代码将直接移动以关闭连接。