【问题标题】:HTTP DELETE verb in Node.JSNode.JS 中的 HTTP DELETE 动词
【发布时间】:2012-12-19 20:57:15
【问题描述】:

在向 node.js 应用程序发出 DELETE 请求之前,我是否需要设置任何配置?

我可以发出GETPOSTPUT 请求,但DELETE 请求不起作用。

DELETE http://localhost:8081/api/1.0/entry 从路由记录器中产生 undefined,我使用 express 来注册路由。但看起来我什至无法解析 url/动词。

这就是我调用它的方式:

rows.find('a.remove').on('click', function(){
    $.ajax({
        url: '/api/1.0/entry',
        type: 'DELETE'
    }).done(function(res){
        var row = $(this).parentsUntil('tbody');
        row.slideUp();
    });
});

样本日志

GET / 200 18ms  
GET /author/entry 200 10ms  
GET /api/1.0/entry 200 2ms  
GET /api/1.0/entry 200 1ms  
GET /api/1.0/entry 200 1ms  
undefined

【问题讨论】:

  • express 中不需要配置...直接使用 app.delete('/api/1.0/entry', function (req, res){
  • 我以为应该是.del?
  • 是的……你也可以使用 .del。一直用.delete。
  • 你用的是什么浏览器?
  • 镀铬边缘,为什么?我可以在控制台中看到请求被触发,它只是永远不会到达服务器

标签: javascript node.js http rest express


【解决方案1】:

希望这能有所帮助:

  • 启用日志记录作为您的第一个中间件以确保请求进入:

    app.use(express.logger());

  • 使用 methodOverride() 中间件:

    app.use(express.bodyParser());

    app.use(express.methodOverride()); // looks for DELETE verbs in hidden fields

  • 创建一个 .del() 路由:

    app.del('/api/1.0/entry', function(req, res, next) { ... });

【讨论】:

  • 开启了日志记录,但是当请求进来的时候,我得到undefined作为路由,真的很奇怪
  • 我认为如果您可以发布您的(相关)服务器端代码,这将是真正有帮助的......
  • 如果undefined 是路由,那么问题出在客户端,而不是服务器端。 Express 不会匹配 undefined/api/1.0/entry
  • 但我在路由中间件之前得到undefined,在express.logger 中,请参阅OP 以获取示例列表
  • 我同意 Golo,看看相关的服务器端代码会很有用。尤其是中间件堆栈。制作一个只有一个 DELETE 路由进行调试的最小服务器也是一个好主意。堆栈中有 methodOverride() 中间件吗?
【解决方案2】:

type 设置的 PUT 和 DELETE 值并非所有浏览器都支持:

参见文档http://api.jquery.com/jQuery.ajax/

您可以在 ajax 请求中使用包含 data:{_method:'delete'} 的 POST 类型:

$.ajax({
    data:{_method:'delete'},
    url: '/api/1.0/entry',
    type: 'POST'
}).done(function(res){
    var row = $(this).parentsUntil('tbody');
    row.slideUp();
});

【讨论】:

  • 所有现代浏览器都支持它们。
猜你喜欢
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 2014-06-25
  • 2011-01-30
  • 2011-08-28
  • 1970-01-01
  • 2015-01-19
相关资源
最近更新 更多