关于node中methodOverride的
为什么我无法使用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)
}
@chinghanho 看懂了!!万分感谢!!!!!