如何检查请求是否在Total.js控制器中发布数据

时间:2014-08-21 18:04:16

标签: node.js coffeescript total.js

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

我的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" }
    

2 个答案:

答案 0 :(得分:3)

您不清楚is / isnt。看那个例子:

coffee> {} is {}
false

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

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
  ...

或者可能检查是否存在某些字段:

if 'type' not of post
  ...

答案 1 :(得分: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 }); 
}