【问题标题】:How to check if a request has post data in a Total.js controller如何检查请求是否在 Total.js 控制器中发布数据
【发布时间】:2014-11-25 21:53:38
【问题描述】:

我想要一个解决方案,通过验证用户是否提交了一些数据来保持对同一功能的查看和发布操作。

我的 total.js 控制器是这样的

# framework
exports.install = (framework) ->
  framework.route "/subscribe", subscribe
  framework.route "/subscribe", subscribe, ['post']

# subscribe form and action
subscribe = ->
  self = this
  post = self.post

  if post
    Subscriber = self.model('subscriber')
    Subscriber.save post

  self.view "form"

问题是post{}当我只是查看页面(不提交数据),所以它总是输入if

如果我与 {} (if post isnt {}) 进行比较,则条件始终为 false,可能是因为 self.post 不是空对象。

[更新]

  • 查看页面时:

    console.log post    #logs {}
    
  • 提交表单时:

    console.log post    #logs { type: 1, email: "email@example.com" }
    

【问题讨论】:

  • 您能否在查看页面和提交数据时记录 - 并向我们展示 - post 是什么?
  • 我已经用您要求的日志更新了问题,@SylvainLeroux。

标签: node.js coffeescript total.js


【解决方案1】:

你不是很清楚is/isnt。看那个例子:

coffee> {} is {}
false

令人惊讶?如果您知道 is 测试是两个变量引用 same 对象,则不会。不相同。真的是相同的对象:

coffee> obj1 = {}
{}
coffee> obj2 = obj1
{}
coffee> obj1 is obj2
true

然后您可以转到== 以测试等效性。但是:

coffee> {} == {}
false

很遗憾,JavaScript does not provide a easy way to test for object equality

在你的情况下,你应该使用一些技巧。喜欢:

if (i for i in post).length == 0
  ...

或者也许检查一些 key 字段的存在:

if 'type' not of post
  ...

【讨论】:

    【解决方案2】:

    简单检查:

    function some_action_in_controller() {
        var self = this;
        // self.body is same as self.post
        var isEmpty = Object.keys(self.body).length === 0);
        self.json({ result: isEmpty }); 
    }
    

    【讨论】:

    • 这是我正在寻找的 :) 谢谢
    猜你喜欢
    • 2013-08-11
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多