【问题标题】:Node.js PUT or POST request to Rails 3 ServerNode.js PUT 或 POST 请求到 Rails 3 服务器
【发布时间】:2012-08-18 05:02:51
【问题描述】:

我正在尝试从 Node.js 向我的 Rails 3 服务器发出 PUT 和/或 POST 请求。我在正文中传递了我的参数,但它们没有变成 Rails 控制器中的参数散列。我的代码如下:

http = require('http');
request = require('request');
qs = require('qs');

data = qs.stringify({name: 'Aaron', points: 10});
request_opts = {
  uri: 'http://localhost:3000/users/update',
  method: 'PUT',
  body: data
}

request(request_opts, function() { console.log(arguments) });

我在我的 Rails 控制器中放置了一个调试器,params 为 nil,但 response.body.read 返回我在 data 中的字符串。

如何从参数与 Rails 兼容的 Node.js 发出 PUT / POST 请求?

【问题讨论】:

    标签: ruby-on-rails node.js


    【解决方案1】:

    querystring 模块会将您的数据序列化为参数编码形式。默认情况下,rails 需要一个 JSON 序列化实体。您应该使用 JSON.stringify 而不是 qs.stringify 将您的用户序列化到请求正文中。或者,您可以显式指定 application/x-www-form-urlencoded 的内容类型标头来告诉 Rails 您要发送的正文的类型。

    【讨论】:

    • 您可能还需要设置内容类型标头。如果根据 Ben Simpson 评论中的链接问题将其设置为 application/x-www-form-urlencoded,则您可能可以将代码保持原样:但这将取决于 rails 是否正确进行内容协商。
    • 这是标题中缺少的内容类型:/
    • 很好,所以 rails 确实会进行内容协商。我已经更新了答案,以更简洁地反映有相同问题的其他人的选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多