我在这里看到了几个问题,例如如何调试RESTful服务,其中提到:
不幸的是,相同的浏览器不允许我测试HTTP PUT,DELETE,甚至在某种程度上测试HTTP POST.
我也听说过浏览器只支持GET和POST,来自其他一些来源:
但是,Firefox中的一些快速测试显示发送PUT和DELETE请求按预期工作 - XMLHttpRequest成功完成,并且请求以正确的方法显示在服务器日志中.我是否缺少某些方面,例如跨浏览器兼容性或非明显的限制?
我试图让服务器处理PUT请求.但无济于事.提交表单后,客户端始终收到"无法发送/"消息. 我正在使用Express 4.x.
请注意,如果我在路线中将"put"更改为"post",请求处理得很好......
如何让我的服务器处理'PUT'请求?
服务器:
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.");
Run Code Online (Sandbox Code Playgroud)
客户
<!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>
Run Code Online (Sandbox Code Playgroud) 好吧我有一个简单的node.js/express.js/mongodb应用程序在这里设置我的配置如下.
var express = require('express'),
mongoose = require('mongoose');
http = require('http');
var app = express();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
//middleware stack
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + "/public"));
});
mongoose.connect("mongodb://localhost/hello");
Run Code Online (Sandbox Code Playgroud)
问题出在我尝试发出PUT或DELETE请求时.我的形式很简单
<form method="POST" action="/users/#{user.name}">
<input type="hidden" name="_method" value="PUT"/>
</form>
Run Code Online (Sandbox Code Playgroud)
现在我的路由器使用express .put()方法捕获路由
app.put('/users/:name', function(req, res) {
var b = req.body;
Users.update(
{ name: req.user.name },
{ name: b.name, age: b.age, email: b.email },
function(err) {
res.redirect('/users/'+b.name);
});
})
Run Code Online (Sandbox Code Playgroud)
当我发出请求时,我只是得到一个"无法PUT"或"无法删除"错误.
我试图通过chomes RESTful客户端以相同的结果发出同样的请求.
我已经阅读了一个与我有同样问题的话题,尽管在评论之后答案并没有解决我的问题.
问题我已经研究了 表达式删除和没有方法覆盖的表达式 …