我不确定如何解决这个问题或者通常的做法是什么。
我正在为学习项目创建一个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();
});
我认为这会同时执行这两个动作。不幸的是它没有,并且我的邮政路线中没有创建新的访客。
我如何收集用户数据,将其保存到数据库,并将用户重定向到目标网址?
答案 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();
});
get
和post
是http methods。无论何时发出请求,它只能使用其中一种方法,而不是两种方法。因此,如果获取请求的方法,则只会调用GET /:custom_url
的回调。