【发布时间】:2016-03-05 07:43:36
【问题描述】:
在我的 restify 服务器中,我有一个要添加过滤器的路由。这在 Express 中的工作方式(这在 Express 中工作)是 response.on 将添加我的处理程序作为回调。然后在响应返回给请求者之前,我的处理程序将被调用。这不是我在 Restify 中看到的行为。我的猜测是我没有正确地将我的处理程序注册到事件机器。
restifyServer.get({ path: "/api/v1/readings", version: ["1.0.0"]}, Reading.getReadings);
我添加了一个处理程序:
function zipkinTracing(request, response, next){
// handle the callback request and record the trace
var trace = zipkin.getTraceFromRequest(request, "ids-api", {address: config.externalIP, port: 80});
if (trace){
zipkin.sendAnnotationReceive(trace);
zipkin.sendAnnotation(trace, 'request.headers',JSON.stringify(request.headers));
trace.parentSpanId = trace.spanId;
zipkin.sendAnnotation(trace, 'http.uri', request.url);
var queryObj = urlLib.parse(request.url, true).query;
Object.keys(queryObj).forEach( function(key){
zipkin.sendAnnotation(trace, key, queryObj[key]);
});
request.zipkinTrace = trace;
}
response.on('after', function(request, response, route, error){
var t = request.zipkinTrace;
if (t) {
zipkin.sendAnnotation(t, 'http.response.code',response.code);
zipkin.sendAnnotationSend(t);
}
});
return next();
}
现在我的路线如下所示:
restifyServer.use(zipkinTracing);
restifyServer.get({ path: "/api/v1/readings", version: ["1.0.0"]}, Reading.getReadings);
问题是response.on('after', 永远不会被解雇。我在这里做错了什么?
Reading.getReadings 看起来像这样:
makeHttpQuery(request, response, function(error, message) {
....
response.send(message['data']['data']);
return next();
}
【问题讨论】:
标签: node.js filter interceptor restify