关于关注和取消关注的nodejs写法

本例子的关注和取消关注,是通过ajax的方法实现的;nodejs后台写好api接口;响应前台的ajax

先看ajax的代码实现:

 1 // 用户关注标签
 2 function subscribe(uid, tid) {
 3   if(!uid || uid.length === 0) window.location.href = '/signin';
 4 
 5   var api = "/users/" + uid + "/tags/" + tid;
 6 
 7   $.post(api, function(data) {
 8     var effect = 'animated bounceIn';
 9     var btn = $("#subscribe-btn");
10     btn.addClass('active').html('已关注');
11     btn.addClass(effect);
12     btn.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() {
13       btn.removeClass(effect);
14       btn.attr('onclick', "unsubscribe('" + uid + "', '" + tid + "');");
15     });
16   });
17 }
18 
19 // 用户取消关注标签
20 function unsubscribe(uid, tid) {
21   var api = "/users/" + uid + "/tags/" + tid;
22   $.delete(api, function(data) {
23     var effect = 'animated bounceIn';
24     var btn = $("#subscribe-btn");
25     btn.removeClass('active').html("<span class='fa fa-plus'></span> 订阅");
26     btn.addClass(effect);
27     btn.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() {
28       btn.removeClass(effect);
29       btn.attr('onclick', "subscribe('" + uid + "', '" + tid + "');");
30     });
31   });
32 }

 

比较有技巧的地方是,在关注的时候发生了两件事:

1、向后台发送数据;

2、添加动画特效,

3、动画特效完成后回调,修改a标签的onclick属性,使其再次被点击时触发 取消关注 事件;

需要注意的是,关注和取消关注是通过a标签的onclick属性触发javascript函数的,行间事件;

还有一种是在href中触发;

后台api代码如下:

 /* 用户添加关注标签 */
  router.post('/users/:id/tags/:tid', function(req, res) {
    thenjs.parallel([
      function(cb) {
        User.findById(req.params.id).exec(function(err, me) { cb(err, me); });
      },
      function(cb) {
        Tag.findById(req.params.tid).select('id').exec(function(err, tag) { cb(err, tag); });
      }
    ]).then(function(error, results) {
      var me = results[0];
      var tag = results[1];

      if(me && tag) {
        if(!me.tags) me.tags = [];
        me.tags.push(tag.id);
        me.tags = _.unique(me.tags, function(t) { return t.id; });
        me.save(function(err) {
          res.json({error:err, tag: tag});
        });
      } else {
        res.json({error:"not found user or tag"});
      }
    });
  });

  /* 用户取消关注标签 */
  router.delete('/users/:id/tags/:tid', function(req, res) {
    User.findById(req.params.id).exec(function(err, me) {
      if(me) {
        me.tags = _.remove(me.tags, function(t) { return t.id == req.params.tid});
        me.save(function(err) {
          res.json({error:err});
        })
      } else {
        res.json({error:"not found user or tag"});
      }
    });
  });

此段代码中用到了then.js;

并且好像有delete方法,$.delete是jquery ajax方法吗;

暂时搁置;去谷歌

找到了一篇文章:这篇文章提到了一句

http://www.cnblogs.com/tylerdonet/p/3520862.html

posted @ 2015-10-09 11:15  挥刀  阅读(451)  评论(0编辑  收藏  举报