为什么我无法使用put和delete方法啊 HTML表单是这么写的
- <input name="_method" type="hidden" value="put" />
增加了这个隐藏域 node里面是这么写的
- app.route(‘/put’)
- .put(function(req, res, next){
-
var index = req.body.id; -
if(info[index]){ -
info[index].name = req.body.name; -
info[index].sex = req.body.sex; -
} -
ejs.renderFile(__dirname + "/view/showSingle.ejs", {aaa : info[index]}, function(err, result){ -
if(!err){ -
res.end(result); -
}else{ -
res.end("Error"); -
console.log(err); -
} -
}); - });
在前面都
- methodOverride = require(“method-override”)
- app.use(methodOverride());
我觉得应该没问题啊。。但是就是不能用put,得到的http方法还是post。。求助怎么一回事。。
4 回复
我的用法:
// overwrite HTTP method
app.use(methodOverride(function(req, res) {
if (req.body && typeof req.body === 'object' && '_method' in req.body) {
var method = req.body._method
delete req.body._method
return method
}
}))
@chinghanho 成功了!!万分感谢大神!!请问下method变量在这里起到的作用是什么啊?返回到哪里去了啊。。 路由判断http动词get、post、put是通过这个返回的method吗?那我没有这样写,这个method默认存在吗??
method 只是暫時儲存你表單裡的 req.body._method 的方法,經過這個 middleware 後 req.body._method 就再也用不到了,所以放心 delete 掉吧!
如果去看 method-override 的原始碼,return 的 method return 到這裏去了。經過一些處理後,然後寫在 req.method 裡,後面 router 就是依這裏的 req.method 做判斷的。
我把那段 code 貼過來:
val = get(req, res)
method = Array.isArray(val)
? val[0]
: val
// replace
if (method !== undefined && supports(method)) {
req.method = method.toUpperCase()
debug('override %s as %s', req.originalMethod, req.method)
}