如何在Meteor中重定向到外部URL并收集客户端数据

时间:2015-08-19 10:40:04

标签: javascript redirect meteor

我的目标是创建一个链接,重定向到外部URL并跟踪客户端数据,如操作系统,浏览器等。

为实现这一目标,我创建了两条不同的路线。一个客户端路由,重定向到跟踪客户端数据并重定向到服务器路由的模板。

以下是我的路线:

Router.route('/:_id', {name: 'url', controller: 'UrlController'});
Router.route('/redirect/:_id', {name: 'urlRedirect', where: 'server'}).get(function () {
    var url = Urls.findOne(this.params._id);
    if (url) {
        this.response.writeHead(302, {
            'Location': url.url
        });
        this.response.end();
    } else {
        this.redirect('/');
    }
});
UrlController = RouteController.extend({
    action: function () {
        this.render('redirect');
    },
    data: function () {
        return Urls.findOne(this.params._id);
    }
});

这是模板:

Template.redirect.onRendered(function () {
    var client = new ClientJS(); // Create A New Client Object
    var userAgent = client.getUserAgent(); // Get User Agent String
    console.log(userAgent);
    Router.go('urlRedirect', {_id: this.data._id});
});

现在我的问题是,是否可以从服务器路由收集客户端数据(我是否需要从:_id/redirect/:_id的内部重定向)?

如果用户已被重定向,他点击了浏览器后面的''按钮,他将看到空的redirect模板。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以从路径中的nodejs request对象获取标头信息。例如,如何获取用户代理字符串:

Router.route('/asd', {where: 'server'}).get(function () {
    var request = this.request;
    var response = this.response;
    var headers = request.headers;
    var userAgent = headers["user-agent"];
    console.log(userAgent);
    response.end();
});