我的目标是创建一个链接,重定向到外部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
模板。我该如何解决这个问题?
答案 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();
});