如何从get路由保存用户数据

时间:2014-05-26 04:26:59

标签: node.js express mongoose

我不确定如何解决这个问题或者通常的做法是什么。

我正在为学习项目创建一个bit.ly克隆,需要在将它们路由到原始URL之前收集用户的ip地址和referrer链接。这是我目前的获取途径:

 router.get('/:custom_url', function(req,res){
  var link = req.params.custom_url;

    var hostUrl = req.protocol + "://" + req.get('host') + '/';

  models.Links.findOne({$or:[{'random_url': link},{'short_url':link}]}, function(err, link){
    res.redirect(link.original_url);
  });

获取路线完美无缺。我正在努力抓取诸如“req.ip”和创建访问者之类的信息,甚至添加另一次访问/点击该链接的总计数。

现在,我为同一条路线添加了一条路线:

 router.post('/:custom_url', function(req,res){
  var visitor = new models.Visitors({ip_address: req.ip, referer: req.headers.referer });
  });
 visitor.save();
});

我认为这会同时执行这两个动作。不幸的是它没有,并且我的邮政路线中没有创建新的访客。

我如何收集用户数据,将其保存到数据库,并将用户重定向到目标网址?

1 个答案:

答案 0 :(得分:1)

我不明白为什么你需要额外的邮寄路线。我认为你应该将它们合并到get url:

router.get('/:custom_url', function(req,res){
  var link = req.params.custom_url;
  var hostUrl = req.protocol + "://" + req.get('host') + '/';
  models.Links.findOne({$or:[{'random_url': link},{'short_url':link}]}, function(err, link){
    res.redirect(link.original_url);
  });
  var visitor = new models.Visitors({ip_address: req.ip, referer: req.headers.referer });
  visitor.save();
});

getposthttp methods。无论何时发出请求,它只能使用其中一种方法,而不是两种方法。因此,如果获取请求的方法,则只会调用GET /:custom_url的回调。