Node.js - Express 4.x - 方法覆盖不处理PUT请求 [英] Node.js - Express 4.x - method-override not handling PUT request

查看:164
本文介绍了Node.js - Express 4.x - 方法覆盖不处理PUT请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图让服务器处理PUT请求。但无济于事客户端在提交表单后不断收到无法POST /消息。 我正在使用Express 4.x。



请注意,如果我在路由中更改put到post,则请求被处理只是很好...



我的服务器如何处理'PUT'请求?



SERVER:

  var express = require(express); 
var bodyParser = require(body-parser);
var methodOverride = require(method-override);

var app = express();

app.use(bodyParser());
app.use(methodOverride());


app.get(/,function(req,res){
res.render(index.ejs);
console.log GET。);
});
app.put(/,function(req,res){
console.log(PUT received:+ req.body.userName + - + req.body.password);
});

app.listen(1337);
console.log(Listening on 1337.);

客户

 <!DOCTYPE html> 
< html>
< head>
< title> TODO提供标题< / title>
< / head>
< body>
< form action =/method =post>
First
< input type =textname =first>
最后
< input type =textname =last>
< input type =hiddenname =_ methodvalue =put>
< button type =submit> Submit< / button>
< / form>
< / body>
< / html>


解决方案

一个更简单的方法可以是使用查询值覆盖

  var methodOverride = require('method-override')

//覆盖POST,具有?_method = PUT
app.use methodOverride('_ method'))

使用HTML进行查询覆盖的示例调用:

 < form method =POSTaction =/ resource?_method = PUT> 
< button type =submit>将资源< / button>
< / form>


I am attempting to have the server handle a PUT request. But to no avail. The client keeps receiving "Cannot POST /" message after submitting the form. I am using Express 4.x.

Note that if I change "put" to "post" in my route, the request gets handled just fine...

How can I have my server handle the 'PUT' request?

SERVER:

var express         = require("express");
var bodyParser      = require("body-parser");
var methodOverride  = require("method-override");

var app             = express();

app.use(bodyParser());
app.use(methodOverride());


app.get("/",function(req,res){
    res.render("index.ejs");
    console.log("GET received.");
});
app.put("/",function(req,res){
    console.log("PUT received: " + req.body.userName + " - " + req.body.password);
});

app.listen(1337);
console.log("Listening on 1337.");

CLIENT

<!DOCTYPE html>
<html>
    <head>
        <title>TODO supply a title</title>
    </head>
    <body>
        <form action="/" method="post">
            First
            <input type="text" name="first">
            Last
            <input type="text" name="last">
            <input type="hidden" name="_method" value="put">
            <button type="submit">Submit</button>
        </form>
    </body>
</html>

解决方案

A simpler way could be override using a query value:

var methodOverride = require('method-override')

// override with POST having ?_method=PUT
app.use(methodOverride('_method'))

Example call with query override using HTML :

<form method="POST" action="/resource?_method=PUT">
  <button type="submit">Put resource</button>
</form>

这篇关于Node.js - Express 4.x - 方法覆盖不处理PUT请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆