我正在使用MongoDB处理node.js CRUD代码。该应用程序允许用户上传照片,编辑详细信息并删除数据库上的照片。我似乎无法使代码的删除部分工作。它应该在删除图片后将用户路由回/照片。
答案 0 :(得分:0)
在您的表单中,您正在发送GET /photo/delete/{id}
请求,而您在服务器端定义的是DELETE /photos/delete/{id}
端点。
要使其工作,HTTP方法和URI都必须匹配。
不幸的是,HTML表单目前不支持DELETE
HTTP方法,因此解决方法是使用express的方法覆盖中间件。
$ npm install method-override
在服务器端添加methodOverride中间件(在app.js中)。
var methodOverride = require('method-override');
...
app.use(methodOverride('_method'));
...
更改HTML表单中的方法和URI,并添加_method
参数以覆盖HTTP方法。
form(method="post" action="/photos/delete/" + photo._id + "?_method=DELETE")
input#delBtn(type="submit" name="delButton" value="Delete Photo")
以下是有关如何使用方法覆盖中间件的更多详细信息。 https://github.com/expressjs/method-override
答案 1 :(得分:0)
从这个链接: Are the PUT, DELETE, HEAD, etc methods available in most web browsers? 他们提到HTML表单只支持GET和POST方法,而XMLHttpRequest(即Ajax)支持GET,POST,DELETE,PUT。
如果你的表单使用post方法,你的路由器应该是router.post('/delete/:photo_id', ...)
如果您想使用router.get('/delete/:photo_id', ...)
,我建议您使用<a href="photos/delete/" + photo_id + "?_method=delete">Delete Photo</a>
希望这会有所帮助。