Orm 如何打印在环回控制台中执行SQL查询所花费的时间?

Orm 如何打印在环回控制台中执行SQL查询所花费的时间?,orm,loopbackjs,loopback,Orm,Loopbackjs,Loopback,我正在使用下面的代码打印应用程序中执行的SQL查询 var chalk = require('chalk'); module.exports = (app) => { var connector = app.datasources.mysqlDs.connector; connector.observe('after execute', function(ctx, next) { console.log(chalk.green(ctx.req.sql)); nex

我正在使用下面的代码打印应用程序中执行的SQL查询

var chalk = require('chalk');

module.exports = (app) => {
  var connector = app.datasources.mysqlDs.connector;
  connector.observe('after execute', function(ctx, next) {
    console.log(chalk.green(ctx.req.sql));
    next();
  });
}
上面的代码在控制台中打印sql查询,如下所示

SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
我对打印执行sql查询所需的时间感兴趣

RubyonRails应用程序打印sql查询和计时,与下面给出的类似

 User Load (0.2ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1

在loopback 3中有什么方法可以实现这一点吗?

恐怕loopback无法提供现成的计时信息。您可以使用执行前<代码>和执行后<代码>挂钩自己收集计时数据

module.exports = (app) => {
  var connector = app.datasources.mysqlDs.connector;
  connector.observe('before execute', function(ctx, next) {
    // store the start time in the context
    ctx.__started = process.hrtime();
    next();
  });

  connector.observe('after execute', function(ctx, next) {
    // compute the time difference as [seconds, nanoseconds]
    const delta = process.hrtime(ctx.__started);
    // convert the two-part value into number of milliseconds elapsed
    // and round it to a single decimal place
    const durationInMs = 10 * Math.round((delta[0]*1000 + delta[1]/1e6)/10);
    console.log('(%s ms) %s', durationInMs, chalk.green(ctx.req.sql));
    next();
  });
}