在 Express.js 中使用 PUT 方法

Posted

技术标签:

【中文标题】在 Express.js 中使用 PUT 方法【英文标题】:Using the PUT method with Express.js 【发布时间】:2013-09-07 06:10:10 【问题描述】:

我正在尝试为 Express.js 应用程序实现更新功能,并且我想使用 PUT 请求来发送新数据,但使用 PUT 时我不断收到错误消息。从我读过的所有内容来看,这只是使用 app.put 的问题,但这不起作用。我的路线文件中有以下内容:

send = function(req, res)  
    req.send(res.locals.content);
;

app.put('/api/:company', function(res,req) 
    res.send('this is an update');
, send);

当我使用邮递员发出 PUT 请求时,我收到“无法 PUT /api/petshop”作为错误消息。我不明白为什么我不能 PUT,或者出了什么问题。

【问题讨论】:

邮递员显示什么错误,500? 404? 你试过使用methodOverride()吗? ***.com/a/8378414/918608***.com/a/14174177/918608 【参考方案1】:

您可能缺少实际的更新功能。当您告诉数据库更新数据时,您有将结果返回给客户端的放置路径。

如果你使用 mongodb 和 express,你可以这样写:

app.put('/api/:company', function (req, res) 
    var company = req.company;

    company = _.extend(company, req.body);

    company.save(function(err) 
    if (err) 
        return res.send('/company', 
            errors: err.errors,
            company: company
        );
     else 
        res.jsonp(company);
    

); 

这个mean stack project 可能会对您有所帮助,因为它涵盖了我刚刚在这里使用的为您的公司交换他们的文章的这个 CRUD 功能。一样的。

【讨论】:

回调中的reqres 参数的顺序是否错误?应该是function(req,res)? expressjs.com/api.html#app.put.method @Akurn,是的,应该是 req res.【参考方案2】:

您的回调函数的参数顺序错误。

将回调顺序改为function(req, res)。 不要使用function(res, req)

【讨论】:

【参考方案3】:

另外,如果你想在putdelete 中重定向(到get 地址),你不能使用普通的res.redirect('/path'),你应该使用res.redirect(303, '/path')。 (source)

如果没有,您将收到Cannot PUT 错误。

【讨论】:

【参考方案4】:

您是否一直在查看您的标题信息? 因为标头应该是header['content-type'] = 'application/json';,所以只有你会在服务器端(node-express)获得更新对象,否则如果你有这样的内容类型纯文本/htm,你会在你的节点应用程序中获得empty req.body

【讨论】:

以上是关于在 Express.js 中使用 PUT 方法的主要内容,如果未能解决你的问题,请参考以下文章

Express.js的PUT请求没有更新MongoDB。

使用express.js框架一步步实现基本应用以及构建可扩展的web应用

将 Express.js 4 的 res.status(401) 链接到重定向

Express Js EJS 布局错误:未指定默认引擎且未提供扩展名

如何将 file_put_contents() 与 FILE_APPEND | 一起使用LOCK_EX 安全吗?

HTTP 补丁 XmlHttpRequest 支持