所以我已经用节点创建了一个 Restful API,一切正常,但我正在尝试向其中添加 EJS,以便我可以使用 HTML 和 CSS,我实现了 GET 和 POST 很好,但我在 DELETE 上出错了。
这是我在路由器中要删除的代码
listRouter.delete('/:id',
function(req, res) {
req.list = list;
req.list.remove(function(err){
if (err)
res.status(500).send(err);
else
res.redirect('/')
});
});
这是我要删除的 EJS
<form method="DELETE" action="/:id">
<button type="submit">Delete</button>
</form>
这是我按下按钮时收到的错误
{
message: "Cast to ObjectId failed for value ":id" at path "_id"",
name: "CastError",
kind: "ObjectId",
value: ":id",
path: "_id"
}
问题是,如果针对 JSON 进行修改,同样的代码也可以工作,所以我不知道它是 EJS 还是我的 Javascript。
谢谢
我认为html5只支持方法形式属性中的
post
和get
但是,就我而言,如果我不使用表单提交,这里是示例
html 或前端示例
<a class="btn btn-raised btn-danger" href="/admin/dashboard/detele/<%= data.userId %>">Delete</a></td>
<!-- The href needs to point at a link where data.userId is shown. Hence you need the = after <% for ejs to show the variable. -->
在app.js中删除url
app.get('/admin/dashboard/detele/:id', users.deleteUser);
在express users.js中
exports.deleteUser = function(req, res) {
users.findOneAndRemove({
userId: req.params.id
}, function(err, user) {
if (err) throw err;
console.log("Success");
});
res.redirect('/admin/dashboard');
}
不要忘记为 mongoose 创建 mongo 模型
var skema = new mongo.Schema({
name: String,
email: String,
password: String,
date: {
type: Date,
default: Date.now
},
admin: Boolean
});
var users = mongo.model('accounts', skema);
我在这里使用EJS,希望对你有帮助
放弃使用方法覆盖可以是解决方案
我使用不同的网址来解决这个问题。
<form action="/quake/forum/update/<%= post._id %>?_method=put" method="post">
和
<form action="/quake/forum/delete/<%= post._id %>?_method=delete" method="post" class="d-inline">
和路由器
主路由器
app.use('/quake/forum',forumRouter); //this is for just making sure explaination clear
子路由器(forumRouter)
router.post('/delete/:id', function (req, res) {
和
router.post('/update/:id', function (req, res) {
通过 HTML 或 ejs 或其他 Views 引擎,您只能发送 POST 和 GET 请求。 然而,有一个 NPM 包名称 Method-override。
npm i method-override;
现在在 App.js 或 inde.js 文件中需要它。 并使用应用程序方法。
var methodOverride = require('method-override');
app.use(methodOverride('_method'));
并写下
<form method='POST' action="link?_method=DELETE>