CNode

关于node中methodOverride的

问答
WwestAnHui发布于12 年前最后回复12 年前4 回复7779 浏览0 收藏

为什么我无法使用put和delete方法啊 HTML表单是这么写的

增加了这个隐藏域 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)

C
chinghanho#1·12 年前

我的用法:

// 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
  }
}))
W
westAnHui#2·12 年前
引用 chinghanho我的用法:

@chinghanho 成功了!!万分感谢大神!!请问下method变量在这里起到的作用是什么啊?返回到哪里去了啊。。 路由判断http动词get、post、put是通过这个返回的method吗?那我没有这样写,这个method默认存在吗??

C
chinghanho#3·12 年前
引用 westAnHui@chinghanho 成功了!!万分感谢大神!!请问下method变量在这里起到的作用是什么啊?返回到哪里去了啊。。 路由判断http动词get、post、put是通过这个返回的method...

@westAnHui

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)
}
参与回复
登录后即可参与回复。登录